如何访问部分嵌套rails表单中的属性?

时间:2011-03-18 18:44:26

标签: ruby-on-rails-3 forms nested-forms partial

我想使用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?我的例子不起作用。

3 个答案:

答案 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 %>

这样你的部分代码看起来就更清晰了。