Как получить доступ к атрибутам в части вложенной формы рельсов? - PullRequest
1 голос
/ 18 марта 2011

Я хочу использовать атрибут boolean is_white из моего inner_object для переключения между html-кодом в частичном _inner_object_form_fields.Это моя попытка.

<%= 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

Я нашел аналогичный вопрос , но не смог получить ответ для меня.Вопрос в том, как получить доступ к атрибуту is_white?Мой пример НЕ работает.

Ответы [ 3 ]

4 голосов
/ 19 марта 2011

Попробуйте

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

Кажется, вы помните, что вы можете получить доступ к объекту таким образом (хотя не уверен на 100%;)

0 голосов
/ 09 сентября 2011

Еще одним шагом будет сделать что-то вроде этого:

 <%= 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 %>

Таким образом, ваш код партиалов выглядит немного чище.

0 голосов
/ 18 марта 2011

Это потому, что 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 %>

Таким образом, он ссылается на прикрепленный объект и любое состояние, которое вы создали.

...