在我感谢你的帮助之前,
我有一个这样的模型:
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,取消过滤器,不要创建或更新属性
答案 0 :(得分:5)
在false
过滤器中返回before_create
以防止保存对象表单。 add_amount
不负责保存对象,也不应单独调用save
。
答案 1 :(得分:0)
您不能在before_create过滤器中执行此操作。您需要在调用CartedProduct
的控制器中获取现有create
。