2011-03-18 71 views
1

我想使用我的inner_object中的boolean屬性is_white在部分_inner_object_form_fields中的html代碼之間切換。這是我的嘗試。如何訪問部分嵌套導軌形式的屬性?

<%= form_for @outer_object do |f| %> 
    <%= f.fields_for :inner_object do |builder| %> 
    <%= render :partial => "inner_object_form_fields", :locals => { :f => builder } %> 
    <% end %> 
<% end %> 

這是我的部分_inner_object_form_fields的嘗試

<% if f.is_white == true %> 
    <%= f.label(:name, "White") %> 
<% else %> 
    <%= f.label(:name, "Black") %> 
<% end %> 

這是InnerObjects的遷移文件。

class InnerObjects < ActiveRecord::Migration 
    def self.up 
    create_table :inner_objects do |t| 
     t.string "name" 
     t.boolean "is_white", :default => true 
     t.timestamps 
    end 
    end 
    def self.down 
    drop_table :inner_objects 
    end 
end 

我發現了一個similar question,但無法爲我檢索答案。 現在的問題是:如何訪問attribut is_white?我的例子不起作用。

回答

4

嘗試

<% if f.object.is_white == true %> 

似乎記得,你可以訪問對象這種方式(不是100%,但肯定;)

+0

'<%if f.object.is_white? %>'也行。謝謝! – JJD 2011-03-18 23:10:49

0

這是因爲f.is_white是基於部分空白對象嗎?嘗試

<%= form_for @outer_object do |f| %> 
<%= f.fields_for f.inner_object do |builder| %> 
    <%= render :partial => "inner_object_form_fields", :locals => { :f => builder } %> 
<% end %> 
<% end %> 

這樣它就會引用附加的對象和你創建的任何狀態。

+1

對不起安東尼。這對我不起作用。我編輯我的帖子清除。 – JJD 2011-03-18 21:05:07

0

即使一步是做這樣的事情:

<%= f.fields_for f.inner_object do |builder| %> 
    <%= render :partial => "inner_object_form_fields", :locals => { :f => builder, :inner_object => builder.object } %> 
<% end %> 

然後你可以做。

<% if inner_object.is_white == true %> 

這樣你的部分代碼看起來更清潔一些。