我有一些可以从任何控制器渲染的共享部分,但是我在从另一个控制器渲染表格部分时遇到了一些麻烦。我希望能够为我的联系人添加备注
在我的contacts / show.html.erb中,我有以下内容
<% render :partial => "notes/form", :note => Note.new %>
在我的笔记/ _form.html.erb中,我有以下内容
<%= form_for @note do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<p>
<%= f.label :content %><br />
<%= f.text_field :content %>
</p>
<p>
<%= f.label :contact_id %><br />
<%= f.number_field :contact_id %>
</p>
<p><%= f.submit %></p>
<% end %>
然而我收到错误:
显示/Applications/Rails/apps/saas31/app/views/notes/_form.html.erb,其中第1行引发:
NilClass的未定义方法`model_name':Class
提取的来源(第1行):
1:&lt;%= form_for @note do | f | %GT; 2:&lt;%= render'shared / error_messages',:object =&gt; f.object%&gt;
我开始掌握铁轨,但在学习任何新东西时我会想到一些令人沮丧的小问题。有人有什么想法吗?
答案 0 :(得分:18)
您的局部变量应该通过本地哈希传递。
<% render :partial => "notes/form", :locals => {:note => Note.new} %>
您的部分也不应该使用实例变量,请更改以下内容:
<%= form_for @note do |f| %>
为:
<%= form_for note do |f| %>
修改强>
如果要使用实例变量,可以执行以下操作:
<% render :partial => "notes/form", :locals => {:note => @note} %>
答案 1 :(得分:2)
进入相同的问题,这篇文章有助于解决。添加我的笔记,希望它可以帮助其他人:)
我有一个用户控制器和_form.html.erb,当我访问/ users / new页面时,它会正常呈现。我试图将表单作为部分来自我的/layouts/application.html.erb,因为我想让用户能够从任何页面创建新用户。
我最终在application_helper.rb中创建了一个新方法(new_user)。这是代码:
def new_user
User.new
end
然后我用application.html.erb渲染部分:
<%= render :partial => 'users/form', :locals => {:user => new_user} %>