0

我很难让我的“更新表单”显示嵌套属性。具体来说,要显示的图像(例如,“选择”)。显示所有其他数据字段。只是这不是我的表格:

<%= 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 个嵌套属性中的每一个。它遍历与 :choice_id 相关的 4 个嵌套属性,这些属性在 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
4

1 回答 1

1

您可能只想builder直接使用,就像您在text_field.

<%= image_tag builder.choice.image %>

[更新]经过反复试验,正确的形式是:

<%= image_tag builder.object.choice.image %>

发生的事情是,当f.fields_for :template_assignments do |builder|用于渲染嵌套项时,builderyield编辑到块中的对象不是对象本身(在本例中为 a TemplateAssignment),而是一个FormBuilder对象,它提供了诸如builder.text_field. (如果你尝试这样做,template_assignment.text_field你会得到一个错误。) 将builder它在表单中表示的对象存储为object,因此你可以template_assignment通过使用来获取你的对象builder.object。从那里你可以处理template_assignment类似的正常情况。我希望这会有所帮助。

于 2013-09-26T02:51:30.687 回答