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

时间:2011-07-15 10:15:20

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

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

在我的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;

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

2 个答案:

答案 0 :(得分:18)

您的局部变量应该通过本地哈希传递。

<% render :partial => "notes/form", :locals => {:note => Note.new} %>

Read section 3.4.4 here.

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

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