#はじめに
「Ruby on Rails」の「devise」を使ってユーザー新規登録/ログイン機能を実装する際、viewを編集しても一向に反映されない問題が発生しました。表示はされることからエラーでもなさそうなため追う術もありません。これを回避するために小技や、devise特有の注意点があることがわかったため、備忘録として残します。
#現象
deviseをインストールし、ビューを「rails g devise:views Model」で作成すると、以下のデフォルトのビューが表示されます。
私の場合は Model = devise で作成しました。
この状態からビューの編集を始めたのですが、どれだけ編集して、どれだけ対策を打ってもデフォルトのビューが表示されるというループにハマりました。
#今回の解決策
今回、ルーティングやビューファイルに問題は無く、ただHaml(new.html.haml)で作成していた筈なのに、ターミナルの表示からHtml(new.html.erb)を読み込みに行ってることが判明(下図参照)。
これはdeviseの特性で、本来読み込みたいビューファイルが見つからない場合、隠しファイルとして持ってるデフォルトのビューファイル(new.html.erb)が読み込まれるようになってるようです。
つまり、今回読み込みたいビューファイル(new.html.haml)を探しに行ったら見つからなかったということ。
となると、「ファイル名かディレクトリ名が違うのでは」と考えられたので調べてみると、本来「devise」であるはずのビューのディイレクトリが「devises」になってることが判明。
「devise」に修正することで、無事に反映されました。
#学んだこと
・本来読み込みたいビューファイルが見つからない場合、隠しファイルとして持ってるデフォルトのビューファイル(new.html.erb)が読み込まれるという特性を「devise」は有しているということ。開発中はエラーが出ないことが難儀ですが、本番環境で運用を始めるとエラー画面を出る方が困るという観点から、用意されているそうです(ここは人伝てに聞いたので確証を持ってお伝えできないですが)。
・deviseのビュー編集が反映されない時は、ルーティングやコントローラーの確認はもちろんですが、ターミナルから読み込み先のファイル名、ディレクトリ名を確認する。
・別の注意点としては以下を「faile」から「true」に編集すること、ビューの編集が可能になるようです。参照:Railsにdeviseをサクッと導入!認証機能の使い方も解説【日本語化】
config.scoped_views = true
以上です。
3つ目に記載した対応は、調べるとよく見られるものですが、1つ目に記載した内容はあまり記事も見当たらないので、参考になれば幸いです。
deviseはじめ、Railsは容易に開発を進められる反面、ブラックボックスになってる部分も多く、奥が深い。