私はこれにかなり近づいていますが、細部に追いついています。has_many :through 関係を更新しようとしています。編集フォームを送信すると、更新したい適切な属性を抽出できません。出荷数量を更新するループは、そのフィールドを正しい値で更新しません。params[:product_shipments] ハッシュから qty_shipped 属性のみを抽出するにはどうすればよいですか?
This is the contents of my params[:product_shipments] hash that the update action is working with
"product_shipments"=> {"82"=>{"qty_shipped"=>"234"},
"83"=>{"qty_shipped"=>"324"},
"84"=>{"qty_shipped"=>"324"}},
"commit"=>"Update Shipment", "id"=>"250"}
@shipment.product_shipments ループは更新を適用可能な shipping_id のみに制限するため、これには出荷を更新するために必要なすべての情報があります。私の問題は、これが更新アクションによって呼び出される次のSQLであることです
ProductShipment Load (0.3ms) SELECT `product_shipments`.* FROM `product_shipments` WHERE `product_shipments`.`shipment_id` = 250
BEGIN
UPDATE `product_shipments` SET `qty_shipped` = 1 WHERE `product_shipments`.`id` = 82
COMMIT
BEGIN
UPDATE `product_shipments` SET `qty_shipped` = 1 WHERE `product_shipments`.`id` = 83
COMMIT
BEGIN
UPDATE `product_shipments` SET `qty_shipped` = 1 WHERE `product_shipments`.`id` = 84
COMMIT
上記の SQL を生成する update アクションは次のとおりです。
def update
@shipment = Shipment.find(params[:id])
@shipment.update_attributes(params[:shipment])
@shipment.product_shipments.each do |shipment|
shipment.update_attributes(:qty_shipped=> params[:product_shipments])
end
respond_with @shipment, :location => shipments_url
end
rbates nested_forms gem を使用することはお勧めしません。なぜなら、レールがどのように機能するかを学ぶ目的でこれを理解したいからです。
<%= hidden_field_tag("product_shipments[][#{product_shipment.id}]") %>
<%= hidden_field_tag("product_shipments[][product_id]", product_shipment.id) %>
<%= text_field_tag "product_shipments[][qty_shipped]", product_shipment.qty_shipped,:class => 'shipment_qty_field'%> <%=@product.product_name %>