我想使用boolean
中的is_white
属性inner_object
来切换部分_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
?我的例子不起作用。
答案 0 :(得分:4)
尝试
<% if f.object.is_white == true %>
似乎记得你可以通过这种方式访问对象(虽然不是100%肯定;)
答案 1 :(得分: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 %>
这样它就会引用附加的对象和你创建的任何状态。
答案 2 :(得分: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 %>
这样你的部分代码看起来就更清晰了。