今回はログインしていなかったので表示できなかった3画面にリベンジする。
4. ユーザ編集画面表示
ログインしていない状態でリクエストするとログイン画面(Sign in)に飛ばされたやつ。
今度はできるだろと思って、ブラウザで localhost:3000/devise_users/edit にアクセスするとなんとエラー画面(rails のよくあるエラー画面)に。
エラー内容を読むと。
- Devise/registrations#edit でメソッドありませんエラー発生
- edit.html.erb の9行目で起きた
- reconfirmableなんてメソッドないよ
具体的には
<% if resource.class.reconfirmable && resource.unconfirmed_email.present? %>
というコードで落ちてる。
多分resourceは編集対象(つまりログインしている人のユーザデータ)をさすと思うので、resourceのclass(これはチョットわからん)にreconfirmableなんてメソッドないよ、と言ってるのだと推測。
で、エラーメッセージでググってみると、
『Hi それはconfig/intializers/devise.rbで config.reconfirmable = true になっているからさ!』
『Hi それはテーブルに必要なカラムがないからさ!』
的なのがあったのでdevise.rbを見直してみると、config.reconfirmable = false になっていた。
ウーン、なんでだろうと思ってテーブルを作成したmigrationを見直してみると
## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable
とこっちは封印がされている。
で、とりあえずこいつらをテーブルに追加してみる。
空マイグレーション作成
rails g migration AddConfirmableToDeviseUsers
で中身を以下の感じに。
でやってみた(ユーザ新規登録➡ユーザ編集)のだがさっきと同じエラーになった。
で、さらにググってみると
『Hi confirmableを使うならconfig.reconfirmable=trueにしてviewを生成するのさ!』
的なメッセージがあったので、
『これひょっとして、config.reconfirmable=trueの状態でview生成して、その後にfalseに設定したんじゃね?』
と思い直して、以下を実施。
で、できたedit.html.erbを見てみると
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
と生成結果が変わっている。
これは期待できる。
➡というわけでやってみた(ユーザ新規登録➡ユーザ編集)
できた。
#左端の青はスクリーンショットとるときに映り込んだうちのmacの背景
ソースは以下のカンジ。
というわけで本日は以下のノウハウと以下の課題が。
長くなったので本日はここまで。
次回は画面表示の続き。
空マイグレーション作成
rails g migration AddConfirmableToDeviseUsers
で中身を以下の感じに。
class AddConfirmableToDeviseUsers < ActiveRecord::Migration
def change
add_column :devise_users, :confirmation_token, :string
add_column :devise_users, :confirmed_at, :datetime
add_column :devise_users, :confirmation_sent_at, :datetime
add_column :devise_users, :unconfirmed_email, :string
end
end
でやってみた(ユーザ新規登録➡ユーザ編集)のだがさっきと同じエラーになった。
で、さらにググってみると
『Hi confirmableを使うならconfig.reconfirmable=trueにしてviewを生成するのさ!』
的なメッセージがあったので、
『これひょっとして、config.reconfirmable=trueの状態でview生成して、その後にfalseに設定したんじゃね?』
と思い直して、以下を実施。
- 一旦deviseのviewを削除
- config.reconfirmable=false に設定(していることを確認)
- rails generate devise:viewを実施
で、できたedit.html.erbを見てみると
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
と生成結果が変わっている。
これは期待できる。
➡というわけでやってみた(ユーザ新規登録➡ユーザ編集)
できた。
#左端の青はスクリーンショットとるときに映り込んだうちのmacの背景
ソースは以下のカンジ。
Edit Devise user
Cancel my account
Unhappy? . Backというわけで本日は以下のノウハウと以下の課題が。
- deviseでconfimationを使わない場合は設定ファイルで『設定しない』をやってからviewを作ること
- そもそもconfirmation機能とはなにかを明らかにすること
長くなったので本日はここまで。
次回は画面表示の続き。
0 件のコメント:
コメントを投稿