创建以下条件后应用于其他属性的更新属性

时间:2013-05-25 12:51:36

标签: ruby-on-rails-3.2 rails-activerecord

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

1 个答案:

答案 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