[解決済み] NilClass:Class に対して、Rails の未定義メソッド `model_name' が存在する。
質問
私はすべてのページのトップに表示させたいフォームを持っているので、それを /app/views/layouts/application.html.erb ファイルに含めましたが、エラーが発生しました。
undefined method
ページをロードしようとすると、NilClass:Class`に対して'model_name'と表示されます。
以下は、application.html.erbのフォームのスニペットです。
<%= form_for @user do |f| %>
<h3>Add new contact</h3>
<%= f.text_field :first_name %><br />
<%= f.text_field :last_name %>
<%= f.text_field :email %>
<hr />
<%= f.submit "Add Contact" %>
<% end %>
以下は、私の /app/controllers/user_controller.rb です。
class UserController < ApplicationController
def index
end
def new
@user = User.new
end
end
フォームがapplication.html.erbファイルにあるので、何らかの方法でパスを指定する必要があるため、このエラーが発生するのだと考えています。
他に掲載が必要なものがあれば教えてください。
EDIT Olaの提案に従って、私のapp/views/layouts/application.html.erbファイルでは、次のようなものがあります。
<div>
<%= yield :add_user %>
</div>
そして、app/views/users/new.html.erb ファイルに以下のように記述します。
<% content_for :add_user do %>
<%= form_for @user do |f| %>
<h3>Add new contact</h3>
First Name<br />
<%= f.text_field :first_name %><br />
Last Name<br />
<%= f.text_field :last_name %><br />
Email<br />
<%= f.text_field :email %>
<hr />
<%= f.submit "Add Contact" %>
<% end %>
<% end %>
フォームがレンダリングされないのは、私のurlが
http://localhost:3000/admin/index
を探すので
add_user
content_for in app/views/admin/index.html.erb
解決方法は?
複数のアクション(ページ)に対してフォームが含まれる場合、そのフォームに
@user
を何かに置き換えるか、あるいは
form_for
ディレクティブは失敗します (フォームを作成するためのものを持ちません)。
のために
).
よりよい方法 (そしてRailsのデフォルト) は、アクションごとに個別のビューを用意し、それぞれにそのアクションが必要とする要素だけを含ませ、そのビューを
application.html.erb
レイアウトを
<%= yield %>
. ですから、あなたは
app/views/users/new.html.erb
ビューで、その中にフォームがあります。あなたは
<ストライク
決して
Railsではロードパスを定義する必要はほとんどなく、すべてモデル、コントローラ、アクションの名前から、あるいは
routes.rb
. の核となる部分です。
設定より規約
Railsに深く浸透しているパラダイムです。
編集する
もし、あなたが
する
新しいオブジェクトを作成するためのフォームを各ページに用意する必要がある場合 (たとえば UserSessions でよく使われます) は、そのために
form_for
オブジェクトが存在することに依存しないようにします。
form_for(User.new)
に強制的に投稿させる必要がある場合や
create
メソッド
form_for(User.new, :url => { :action => "create" })
リソース駆動の詳細については、こちらをご覧ください。
form_for
の中で
Ruby On Rails APIのドキュメントです。
関連
-
[解決済み】Rails。Ruby on Railsの移行でデータベースカラムの名前を変更するにはどうすればよいですか?
-
[解決済み】gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み】PG::ConnectionBad: fe_sendauth: パスワードが供給されない
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜ?
-
[解決済み] Railsで `before_action` での `only:` はどのように機能するのですか?
-
[解決済み] Rspec が私のモデルクラスを認識しない。初期化されていない定数エラー
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
-
[解決済み】Railsの認証トークンを理解する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】警告:定数 ::Fixnum は非推奨 新しいモデルを生成するとき
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜでしょうか?
-
[解決済み] Railsです。NameError: 初期化されていない定数
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] 検索 vs 発見する by vs どこに
-
[解決済み] RVMでRubyのデフォルトバージョンを設定するには?
-
[解決済み] Devise Admin Roleの追加【終了しました
-
[解決済み] Rails / Haml: 投稿フォームを作成するには?
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] Heroku Error R14 (Memory quota exceeded): How do I solve this?