ネストされたモデルとフォーム フィールドのコンテキストでは、親の作成と子の値 (サイズ) の入力時に、子の値に条件を適用して後続の値 (product_id) を決定することが目標です。親アクションの
class QuoteItem < ActiveRecord::Base
belongs_to :quote, :inverse_of => :quote_items
belongs_to :product
class Quote < ActiveRecord::Base
has_many :quote_items, :inverse_of => :quote
モデルにはパラメーターの概念がないため、これを事前にモデル メソッドとして実行することはできません。QuoteItem の after_create コールバックを定義しようとしています
after_create :set_product
def set_product
@quote_item.product_id = Product.where(['min <= ? AND max >= ?', @quote_item.size, @quote_item.size]).first.select[:id]
end
商品IDを登録しません。
より簡潔な方法は、コントローラーを介してデータをリロードすることです。アクション作成時
respond_to do |format|
if @quote_item.save
set_product
@quote_item.update_attribute([:quote_item][:product_id])
format.html { redirect_to @quote_item, notice: 'Quote item was successfully created.' }
同一の NIL 結果