1

ネストされたフォームからいくつかの has_many 関連付けの詳細を作成/更新しようとしています。私はこれらの3つのモデルを持っており、モデルPoliticianCharacteristic参加しますCharacteristicPoint

class Politician < ActiveRecord::Base
      has_many :characteristics, :through => :characteristic_points
      has_many :characteristic_points
accepts_nested_attributes_for :characteristic_points
attr_accessible :characteristic_points_attributes
end

class Characteristic < ActiveRecord::Base
  attr_accessible :name
  has_many :politicians, :through => :characteristic_points
  has_many :characteristic_points

end

class CharacteristicPoint < ActiveRecord::Base
  attr_accessible :characteristic_id, :politician_id, :score_obtained
  belongs_to :politicians
  belongs_to :characteristics
end

私がする必要があるのは、PoliticiansController (既存の政治家用) から、モデル内の各特性レコードのスコアを保存する必要があることです。例: 1) (C1,C2,C3) という名前のテーブルにいくつかの特性があります 2)score_updateアクションを選択すると、すべての特性項目をループするフォームを表示し、スコアを追加するフォームを表示する必要があります 3) オン同じフォームを更新するには、手順 2 で割り当てられた値を入力し、ユーザーが新しいレコードで更新できるようにする必要があります。(現在、ビューに重複するエントリを作成し、テーブルにレコードを再作成しcharacteristic_pointsますが、これを行う必要はありません。)

これが私の既存のコードです:

コントローラ

 def score_card
    @politician = Politician.find(params[:id])
    @characteristics = Characteristic.roots
    @politician.characteristic_points.build
  end
  def score_card_update
    @politician = Politician.find(params[:id])

    respond_to do |format|
      if @politician.update_attributes(params[:politician])
        format.html { redirect_to score_card_cms_politician_path(@politician), notice: 'Score card successfully updated.' }

      else
        format.html { render action: "edit" }

      end
    end
  end

ビュー

<%= form_for @politician,:url => score_card_update_politician_path,:html =>{:method => :post}  do |f| %>


                <% @characteristics.each do |characteristic| %>

                        <%= f.fields_for :characteristic_points do |builder|  %>
                        <%= render 'characteristic_point_fields', :f => builder, :politician => @politician, :characteristic => characteristic %>
                        <% end %>
                <% end %> 


    <%= f.submit "Update score"%>

<% end %>

_characteristic_point_fields.html.erb

<%= f.hidden_field :characteristic_id, :value => characteristic.id %>
<%=f.label characteristic.name%>
<%= f.text_field :score_obtained %>

これが明確であることを願っています。どんな助けも大歓迎です。

4

0 に答える 0