从其他控制器渲染表单部分

Nic*_*ick 6 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我有几个可以从任何控制器渲染的共享部分,但是我在从另一个控制器渲染表格部分时遇到了一些麻烦.我希望能够为我的联系人添加备注

在我的contacts/show.html.erb中,我有以下内容

<% render :partial => "notes/form", :note => Note.new %>
Run Code Online (Sandbox Code Playgroud)

在我的笔记/ _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 %>
Run Code Online (Sandbox Code Playgroud)

但是我得到错误:

显示/Applications/Rails/apps/saas31/app/views/notes/_form.html.erb,其中第1行引发:

用于NilClass的未定义方法`model_name':Class

提取的来源(第1行):

1:<%= form_for @note do | f | %> 2:<%= render'shared/error_messages',:object => f.object%>

我开始掌握铁轨,但在学习任何新东西时我会想到一些令人沮丧的小问题.有人有主意吗?

Gaz*_*ler 18

您的局部变量应该通过locals哈希传递.

<% render :partial => "notes/form", :locals => {:note => Note.new} %>
Run Code Online (Sandbox Code Playgroud)

请阅读此处的第3.4.4节.

你的部分也不应该使用实例变量,改变以下内容:

<%= form_for @note do |f| %>
Run Code Online (Sandbox Code Playgroud)

至:

<%= form_for note do |f| %>
Run Code Online (Sandbox Code Playgroud)

编辑

如果要使用实例变量,可以执行以下操作:

<% render :partial => "notes/form", :locals => {:note => @note} %>
Run Code Online (Sandbox Code Playgroud)