こんばんは
アロハな男、やすのりです!
今日はdeviseのビューファイルを修正している時に遭遇した躓きポイントについてお話していこうと思います。
ただ、前提が当てはまる人は参考にしていってね!!
前提
Railsでアプリケーション作成中にGemの
_devise_を使用していて、更に_haml-rails_等でhtml.erb
をhtml.haml
に変換している人
状況

_devise_の新規登録ページのビューファイルに名前の入力欄を追加したいと思いコード修正していました。
%h2 Sign up
= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
= render "users/shared/error_messages", resource: resource
.field
= f.label :name
%br/
= f.text_field :name, autofocus: true
.field
= f.label :email
%br/
= f.email_field :email, autofocus: true, autocomplete: "email"
.field
= f.label :password
- if @minimum_password_length
%em
(#{@minimum_password_length} characters minimum)
%br/
= f.password_field :password, autocomplete: "new-password"
.field
= f.label :password_confirmation
%br/
= f.password_field :password_confirmation, autocomplete: "new-password"
.actions
= f.submit "Sign up"
= render "users/shared/links"
ということで、:nameの欄を足してこれでバッチリだ!!
と、思っていたら...
...え?
何も変わってなくない??あれ???
修正するビューファイル間違えたかな?と思って確認してみても間違いなく registrations って書いてあるし...
あれ!?
なぜか、new.html.erb
を参照してる!?
しかも参照先がapp/views/deviseregistrations/new.html.erb
になってるぞ!?
と、思いいろいろ調べて見ると原因が見えてきました。
原因
僕のアプリケーションの構成上、deviseにUserモデルを持たせていたので、_devise_のビューファイルを生成する時に$ rails g devise:views users
とコマンドを打っていたんですが、これが原因みたいです。
そもそも_devise_のモデルがUserモデル
以外に無いのであれば、 $ rails g devise:views
だけで良かったみたいです。
※Userモデル以外というよりは、deviseのモデルが__1つだけ__の時と言う方が正しいかも?
2つのコマンドの違いは?
生成されるビューファイルのディレクトリ構造が少し変わってしまいます。
具体的には$ rails g devise:views users
とコマンドを打った場合は、
app/views/users/
以下にディレクトリとビューファイルが生成されます。
一方、 $ rails g devise:views
とコマンドを打った場合は
app/views/devise
以下にディレクトリとビューファイルが生成されます。
deviseディレクトリ...
これだぁぁあああ!!
はい、ということでビューファイルを生成した段階でコミットしていたので、コミット履歴を削除してコマンドを打ち直した後に、新規ビューファイルのコードを修正してみました。
すると...

よしっ!!
名前の入力欄が加わってるぞ!!

参照先もちゃんとnew.html.haml
になってる!!
結論
_devise_のビューファイルを生成する時は、基本$ rails g devise:views
でOK!!
皆さんも気をつけてね!!