我在使用“更新表单”显示嵌套属性时遇到了一些困难。具体地,要显示的图像(例如,“选择”)。显示所有其他数据字段。这不是我的形式:
<%= bootstrap_form_for @template, :url => {:action => 'update', :id => @template.id } do |f| %>
<fieldset>
<legend>Update Your Template</legend>
<%= f.text_field :prompt, :class => :span6, :placeholder => "Which one is running?", :autocomplete => :off %>
<%= f.select 'group_id', options_from_collection_for_select(@groups, 'id', 'name', selected: @template.group.id) %>
<div class="row-fluid">
<ul class="thumbnails">
<%= f.fields_for :template_assignments do |builder| %>
<li class="span3" id="">
<div class="thumbnail">
<%= builder.text_field :choice_id %>
<%= image_tag @template.template_assignments.builder.choice.image %>
</div>
</li>
<% end %>
</ul>
</div>
<% end %>
我遇到麻烦的主线是:
<%= image_tag @template.template_assignments.builder.choice.image %>
我无法让它迭代遍历图像的4个嵌套属性。它遍历4个与以下属性相关的嵌套属性:choice_id,它在text_field中正确显示。
如果我将其更改为:
<%= image_tag @template.template_assignments.first.choice.image %>
,它显示第一张图片没问题。
但是,我需要它来迭代并显示“第一”,“第二”,“第三”和“第四”图像。
有关如何显示这些图像的任何帮助,就像正在显示image_id一样?
修改 这是我的模特
# app/models/template.rb
class Template < ActiveRecord::Base
belongs_to :group
has_many :template_assignments, dependent: :destroy
has_many :choices, :through => :template_assignments
accepts_nested_attributes_for :template_assignments, allow_destroy: true
end
# app/models/template_assignment.rb
class TemplateAssignment < ActiveRecord::Base
belongs_to :template
belongs_to :choice
end
# app/models/choice.rb
class Choice < ActiveRecord::Base
has_many :template_assignments
has_many :templates, :through => :template_assignments
end
答案 0 :(得分:1)
您可能希望直接使用builder
,就像您在text_field
中所做的一样。
<%= image_tag builder.choice.image %>
[更新]经过一些试验和错误后,正确的表格将是:
<%= image_tag builder.object.choice.image %>
当发生嵌套项目使用f.fields_for :template_assignments do |builder|
时,builder
对象yield
对象本身不是对象本身(在本例中为{ {1}}),但是TemplateAssignment
对象,它提供了诸如FormBuilder
之类的便利方法。 (如果您尝试执行builder.text_field
,则会收到错误。)template_assignment.text_field
将表单中所代表的对象存储为builder
,这样您就可以暂停object
使用template_assignment
对象。从那里你可以正常处理builder.object
。我希望有所帮助。