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つのネストされた属性のそれぞれを反復処理することはできません。これは、text_field に正しく表示される :choice_id に関連する 4 つのネストされた属性を反復処理します。

私はそれを変更した場合:

<%= image_tag @template.template_assignments.first.choice.image %>、最初の画像は問題なく表示されます。

ただし、「1 番目」、「2 番目」、「3 番目」、「4 番目」の画像を繰り返し表示する必要があります。

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|ネストされた項目をレンダリングするために を使用すると、ブロックに渡されるbuilderオブジェクトyieldはオブジェクト自体 (この場合は a TemplateAssignment) ではなく、FormBuilderのような便利なメソッドを提供するオブジェクトbuilder.text_fieldです。(実行しようとするとtemplate_assignment.text_field、エラーが発生します。)builderは、フォームで表すオブジェクトを として保存するため、を使用してオブジェクトをobject保持できます。そこから、通常のように対処できます。それが役立つことを願っています。template_assignmentbuilder.objecttemplate_assignment

于 2013-09-26T02:51:30.687 に答える