在嵌套模型和表单字段的上下文中,在创建父项和输入子项的值(大小)时,目标是对子项的值应用条件以确定后续值(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 结果