0

NilClass:Classの未定義のメソッド`model_name'を取得し続けます。

レイアウトファイル内:[application.html.erb]

    <section id="featured">
        <%= render 'subscribers/new' %>
    </section>

部分的な形式:[ビュー>サブスクライバー> _new.html.erb]

    <%= form_for @subscriber, :url => subscribe_path do |f| %> [THIS LINE PRODUCES THE ERROR]
        <div class="field">
          <%= f.text_field :email %>
        </div>
        <div class="actions">
          <%= f.submit 'Add me to the list' %>
        </div>
    <% end %>

サブスクライバーコントローラーの場合:[コントローラー>subscribers_controller.rb]

   def new
     @subscriber = Subscriber.new
   end

私はRORの初心者で、StackOverflowを見回しましたが、特定のケースに対する答えが見つかりません。

4

2 に答える 2

1

このエラーが表示されたときに、どのパスをたどっていますか?

/subscribers/newそれ以外のパスに移動している場合は@subscribernilフォームに表示されているエラーがスローされます。ビューレイアウトのパーシャルを介してフォームをレンダリングしています。そのレイアウトは(おそらく)アプリ全体でレンダリングされます。したがって@subsriber、常に設定されるとは限りません。

于 2012-10-06T23:53:01.923 に答える
0

問題は、サブスクライバー/新しいテンプレートをレイアウトに直接レンダリングしているが、サブスクライバーコントローラーでサブスクライバーを初期化するだけであるということです。

subscribers / new.html.erbファイルを作成する必要があります(先頭にアンダースコアがないため、部分的ではありません)

レイアウトファイルのどこかにyield電話が必要です。/subscribers/newにアクセスすると、railsはnew.html.erbテンプレートファイルをレンダリングyieldし、レイアウトので呼び出された場所にそれを詰め込みます。

すべてのページでこのフォームが本当に必要な場合は、すべてのページで新しいサブスクライバーを初期化する必要があります。これは、アプリケーションコントローラーのbeforeフィルターを使用して行うことができます。ただし、サブスクライバーコントローラーで新しいアクションを実行する必要はありません。

于 2012-10-07T02:06:42.653 に答える