[解決済み] 別コントローラーでフォームを工夫する
質問
サインイン/サインアウトの手続きにdevise gemを使用しています。
deviseからviewsファイルを生成し
rails g devise views
devise/sessions/new.html.erb ファイルがあり、サインイン用のフォームが含まれているのがわかりました。
私は別のファイルdevise/sessions/_form.html.erbを作成し、以下を実行しました。
<%= render 'form' %>
を新しい.html.erbファイルの中で行い、それは非常にうまくいきました。
さて、私はこのフォームを別のコントローラから取り込みたかったのです。そこで、'main' というコントローラ (具体的にはビューページ内) 'mains/index.html.erb' で、次のように記述しました。
<%= render 'devise/sessions/form' %>
というファイルを作成しました。インクルードはうまくいったようなのですが、次のようなエラーが発生します。
NameError in Mains#index
Showing /home/administrator/Ruby/site_v4_ruby/app/views/devise/sessions/_form.html.erb where line #1 raised:
undefined local variable or method `resource' for #<#<Class:0x007f1aa042d530>:0x007f1aa042b870>
Extracted source (around line #1):
1: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
2: <p><%= f.label :email %><br />
3: <%= f.text_field :email %></p>
4:
form_for(resource,...)の部分が問題を引き起こしているようです(元のdeviseのサインインページであれば問題なく動作するのですが...)。この問題を解決するには、どのようにレールを敷けばよいのでしょうか?
個人的にはインラインでhtmlコードを書くよりも、'render'関数を使ってフォームをインクルードする方が好きなんです。
main'コントローラの中で何か(リソース)を指定する必要があるのでしょうか?
ご教授の程、宜しくお願い致します。よろしくお願いいたします。
どのように解決するのですか?
Andresが言うように、フォームはDeviseによって指定されたヘルパーを呼び出すので、Devise以外のコントローラからDeviseフォームにアクセスしたときには存在しないのです。
これを回避するためには、フォームを表示したいコントローラのヘルパークラスに以下のメソッドを追加する必要があります。あるいは、アプリケーションヘルパーに追加するだけで、どこでも利用できるようになります。
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
出典 http://pupeno.com/blog/show-a-devise-log-in-form-in-another-page/
関連
-
[解決済み】なぜRuby on Railsは、http://localhost:3000 の代わりに http://0.0.0.0:3000 を使用するのですか?
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] Railsで `before_action` での `only:` はどのように機能するのですか?
-
[解決済み] railsで':remote => true'はどのように動作するのでしょうか?
-
[解決済み] rails consoleを起動するとRailsのイニシャライザーが呼ばれる?
-
[解決済み] ActionController::RoutingError: 初期化されていない定数MicropostsController
-
[解決済み] rails/rubyでgroup_byを使用する。
-
[解決済み] Rails 4で、以前のバージョンのRailsでattr_accessibleを使用していた状況に遭遇した場合、Forbidden Attributes Errorが発生する。
-
[解決済み] /users/sign_out" に一致するルートがない devise rails 3
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bundle installが "Could not locate Gemfile "を返す。
-
[解決済み】Bundler: コマンドが見つからない
-
[解決済み】gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] Mac OS Xにhomebrewがインストールされているかどうかを確認する方法
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] Ruby:Rubyの配列にinclude.の反対はある?
-
[解決済み] 属性を割り当てる場合、引数としてハッシュを渡す必要がある
-
[解決済み] レイル 4 radio_button_tag default not selected
-
[解決済み] Railsコンソール:リロード!モデルファイルの変更が反映されない?考えられる理由は何でしょうか?