3

在一切之前,我要感谢您的帮助

我有一个这样的模型:

  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 中的用户和产品

问题是,当执行之前创建时,我希望它更新表中的记录,如果记录已经存在,则添加控制器传递的数量,如果不存在,则创建一个,就iv完成而言,它会更新数量,但仍然使用按顺序传递的参数创建一个新的,我希望它只更新,而不是在找到记录时执行这两个操作

谢谢你的耐心

编辑:

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

4

2 回答 2

5

false在过滤器中返回before_create以防止对象形式被保存。add_amount不负责保存对象,也不应该自己调用save

于 2012-07-20T02:34:32.350 回答
0

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

于 2016-01-14T10:23:00.523 回答