Rails形成部分重用

时间:2012-12-04 06:34:27

标签: ruby-on-rails ruby-on-rails-3.2

以下是有效的Rails标准表单。

<div id="content-form">
  <%= form_for @passion, url: passion_path do |f| %>
    <%#= render :partial => "form", :f => f %>
    <div class="alternate">
      <%= f.label "Status" %>
      <%= f.text_field :status %>
    </div>

  <% end %>
</div>

现在我使用以下内容将部分提取到_form.html.erb

<div class="alternate">
  <%= f.label "Status" %>
  <%= f.text_field :status %>
</div>

并将表单更新为:

<div id="content-form">
  <%= form_for @passion, url: passion_path do |f| %>
    <%= render :partial => "form", :f => f %>
  <% end %>
</div>

但现在这会引发错误抱怨f变量。

undefined local variable or method `f' for #<#<Class:0x0000012d51d3e8>:0x0000012d796ef8>

Extracted source (around line #2):

1: <div class="alternate">
2:   <%= f.label "Status" %>
3:   <%= f.text_field :status %>
4: </div>

这是为什么?它漂亮的Rails基本。

要考虑资源@passion是单数的一件事。即resource :passion(用户has_one激情)

因此,我必须在url: passion_path中使用明确的form_for ...

顺便说一下,使用Rails 3.2.9

2 个答案:

答案 0 :(得分:4)

try this

<div id="content-form">
<%= form_for @passion, url: passion_path do |f| %>
<%= render :partial => "form", :locals=>{:f => f } %>
<% end %>
</div>

答案 1 :(得分:3)

您正在使用:partial选项,这意味着您必须使用:locals传递局部变量:

<%= render :partial => "form", :locals => { :f => f } %>

较不详细的选项是:

<%= render "form", :f => f %>