2011-06-21 19 views
7

私はスキャフォールディングによって作成されたデフォルトのコードを使用しています。私は何も変えていない。未定義のメソッドmodel_name

Showing app/views/presences/_form.html.erb where line #1 raised: 
undefined method `model_name' for NilClass:Class 

1: <%= form_for(@presence) do |f| %> 
2: <% if @presence.errors.any? %> 
3:  <div id="error_explanation"> 
4:  <h2><%= pluralize(@presence.errors.count, "error") %> prohibited this presence from being saved:</h2> 

ここで何が間違っていますか?私は "model_name"というメソッドを呼び出すことは決してありません。このコードは自動化されていますが、なぜ動作しませんか?

おかげnewまたはフォームをレンダリングしている他の関連するアクションであなたのpresences_controllerにこれを追加すること

答えて

20

試してみてください。

#presuming your model is called Presence 
@presence = Presence.new 
+2

ありがとうございます。私はまだRoRの仕組みを理解しようとしていますが、これらのエラーメッセージはあまり役に立ちません。 – Bv202

+0

呼び出し元のバインディングを使用し、より良いエラーgem - デバッグ用のウィンドウでコンソールを取得します。 –

5

ビュー(とのform_forメソッド)は、実際に本物のプレゼンスを持つことを期待しますモデルを@presence変数に追加します。このような@変数はコントローラから渡されます。つまり、コントローラのアクションでそれを設定する必要があります。

"新しい"アクションの場合 - あなたがプレイしている既存のプレゼンスオブジェクトを持っていない(「ショー」とは違う)ので、ブランクの新しいものを設定するだけで済みます。

form_forメソッドは、このようなPresenceオブジェクトを取得し、それがdbの既存オブジェクトであれば、それを更新する正しいPOSTルートを作成します。しかし、それが新しい空のものであれば、新しいものを作成するための正しいルートを作成します。

希望するもの...

関連する問題