好的,所以关系是:程序有很多:事件 每个事件都属于一个组织者(who_many:events)
在编辑/编辑的表单中,我想列出相关的事件,并且每个条目都可以访问每个管理器,以便我可以执行以下操作:
textfield(event.name)| textfield(event.date)|标签(event.organizer.name)
因此...
<% form_for([:admin, program]) do |f| %>
...
<h3>Event Data Fields</h3>
<table>
<% f.fields_for :events do |event_form| %>
<tr class="line_item">
<td><%= event_form.text_field :name %></td>
<td><%= event_form.text_field :date %></td>
<td><%= event_form.text_field "organizer.name", :disabled=>true %></td>
</tr>
<% end %>
</table>
<p><%= f.submit "Submit" %></p>
<% end %>
显然, event_form.text_field“organizer.name”不起作用,但这是概念
答案 0 :(得分:2)
为什么不直接使用字段?...
<% form_for([:admin, program]) do |f| %>
...
<h3>Event Data Fields</h3>
<table>
<% program.events.each do |event| %>
<% f.fields_for event do |event_form| %>
<tr class="line_item">
<td><%= event_form.text_field :name %></td>
<td><%= event_form.text_field :date %></td>
<% event_form.fields_for(:organizer) do |organizer_form| %>
<td><%= organizer_form.text_field :name, :disabled=>true %></td>
<% end %>
</tr>
<% end %>
<% end %>
</table>
<p><%= f.submit "Submit" %></p>
<% end %>
答案 1 :(得分:0)
只有在一次处理一个对象时,Rails表单助手才有效。如果要同时更新其他记录的属性,则需要对这些字段使用text_field_tag,并在控制器中包含用于解释/保存该数据的自定义逻辑。恕我直言,这远非最佳做法。
替代解决方案包括使用AJAX内联编辑,或者如果想要在编辑时将组织者与事件相关联,则使用选择字段。
但是,如果组织者与您域中的事件密切相关,您希望同时编辑其字段,为什么不在事件对象上使用organizer_name?至少,如果不了解你的对象模型,这将是我的直觉。
答案 2 :(得分:0)
您可以将其作为 halogenandtoast 提及,但如果您只想显示该字段,您也可以这样做:
而不是:
<td><%= event_form.text_field "organizer.name", :disabled=>true %></td>
放:
<td><%= event_form.object.organizer.name %> </td>
将object
添加到表单构建器时,它将引用已处理的对象,因此您可以访问它的属性。