我一直在为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,但找不到我具体案例的答案。
答案 0 :(得分:1)
当您看到此错误时,您正在尝试什么路径?
如果您导航到/subscribers/new
以外的任何路径,则@subscriber
将为nil
,表单将抛出您看到的错误。您正在视图布局中通过局部渲染表单,该布局在整个应用程序中呈现(大概)。因此,@subsriber
并不总是被设置。
答案 1 :(得分:0)
问题是,您是直接在布局中呈现订阅者/新模板,而只是在订阅者控制器中初始化订阅者。
你需要创建一个subscriber / new.html.erb文件(没有前导下划线,所以它不是部分的)
在布局文件中的某个位置,您应该进行yield
调用。
当您访问/ subscriber / new rails时,会呈现new.html.erb模板文件,并将其填充到布局中调用yield
的位置。
如果您确实需要在每个页面上使用此表单,则需要在每个页面上初始化新订阅者。您可以使用应用程序控制器中的before过滤器执行此操作。但是,您不需要在订户控制器中执行新操作。