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 %>

在订阅者控制器中:[控制器>订阅者控制器.rb]

   def new
     @subscriber = Subscriber.new
   end

我是 ROR 的初学者,我环顾了 StackOverflow,但找不到针对我的具体案例的任何答案。

4

2 回答 2

1

当您看到此错误时,您正在走哪条路?

如果您要导航到除/subscribers/newthen之外的任何路径,则表单@subscribernil抛出您所看到的错误。您正在通过视图布局中的部分呈现表单,该布局在整个应用程序中呈现(可能)。因此@subsriber不会总是被设置。

于 2012-10-06T23:53:01.923 回答
0

问题是,您直接在布局中呈现订阅者/新模板,但仅在订阅者控制器中初始化订阅者。

您需要创建一个subscribers/new.html.erb 文件(没有前导下划线,所以它不是部分)

在你的布局文件的某个地方你应该有一个yield电话。当您访问 /subscribers/new 时,rails 会呈现 new.html.erb 模板文件,并将其填充yield到布局中调用的位置。

如果您真的需要在每个页面上都使用此表单,则需要在每个页面上初始化一个新的订阅者。您可以使用应用程序控制器中的前置过滤器来执行此操作。但是,您将不需要订阅者控制器中的新操作。

于 2012-10-07T02:06:42.653 回答