在嵌套模型和表单字段的上下文中,在创建父项并输入子项的值(大小)时,目标是对子项的值应用条件以确定后续值(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结果
答案 0 :(得分:1)
在after_create中实际上可以实现解决方案。 在嵌套模型中,在创建
之后更新属性 after_create :set_product
private
def set_product
product_id = Product.where(['min <= ? AND max >= ?', self.size, self.size]).first.id
update_attributes(:product_id => product_id)
end