【注意!!】Railsのdeviseとviewファイルをhamlに変換する時の注意点
こんばんは
アロハな男、やすのりです!
今日は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!!
皆さんも気をつけてね!!
Author And Source
この問題について(【注意!!】Railsのdeviseとviewファイルをhamlに変換する時の注意点), 我々は、より多くの情報をここで見つけました https://qiita.com/yasunori_aloha/items/c12d711d8a1257d6bfa2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .