未定义的方法' model_name'

时间:2012-10-06 22:54:57

标签: ruby-on-rails

我一直在为NilClass获取一个未定义的方法`model_name':Class。

在布局文件中:[application.html.erb]

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

在形式partial:[views&gt;订阅者&gt; _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 %>

在订户控制器中:[控制器&gt; subscribers_controller.rb]

   def new
     @subscriber = Subscriber.new
   end

我是ROR的初学者,我看了看StackOverflow,但找不到我具体案例的答案。

2 个答案:

答案 0 :(得分:1)

当您看到此错误时,您正在尝试什么路径?

如果您导航到/subscribers/new以外的任何路径,则@subscriber将为nil,表单将抛出您看到的错误。您正在视图布局中通过局部渲染表单,该布局在整个应用程序中呈现(大概)。因此,@subsriber并不总是被设置。

答案 1 :(得分:0)

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

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

在布局文件中的某个位置,您应该进行yield调用。 当您访问/ subscriber / new rails时,会呈现new.html.erb模板文件,并将其填充到布局中调用yield的位置。

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