2012-12-04 57 views
0

以下是工作的Rails std形式。Rails3形式部分重用

<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 passion)

由於這個原因,我必須在form_for ...中使用顯式的url: passion_path

順便說一句,使用Rails 3.2.9

回答

4
try this 

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

您正在使用:partial選項,這意味着你必須通過局部變量與:locals

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

的更簡潔的選擇是:

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