before_create仍然保存

时间:2012-07-20 02:24:18

标签: ruby-on-rails self update-attributes

在我感谢你的帮助之前,

我有一个这样的模型:

  attr_protected nil
  belongs_to :product
  belongs_to :user
  before_create :add_ammount

  def carted_product_price(ammount, price)
    ammount * price
  end

  def add_ammount
    carted_product = CartedProduct.where(:product_id => self.product_id, :user_id => self.user_id)
    if carted_product
      carted_product.first.ammount += self.ammount
      carted_product.first.update_attributes(:ammount => carted_product.first.ammount)
    else
      self.save
    end
  end

它将购买订单保存在一个名为Carted_Products的表中,该表连接到belogings中的用户和产品

问题是当在创建之前执行时,我希望它更新表中的记录,如果记录已经存在则添加控制器传递的ammount,如果没有,则创建一个,到目前为止正如我已经完成的那样,它会更新ammount但是仍然会按顺序创建一个新的序列,我希望它只是更新,而不是在找到记录时执行这两个操作

thnx耐心等待

编辑:

尝试在更新属性后返回false,取消过滤器,不要创建或更新属性

2 个答案:

答案 0 :(得分:5)

false过滤器中返回before_create以防止保存对象表单。 add_amount不负责保存对象,也不应单独调用save

答案 1 :(得分:0)

您不能在before_create过滤器中执行此操作。您需要在调用CartedProduct的控制器中获取现有create