Rails回调after_save没有设置属性

时间:2012-08-10 10:45:19

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

我正在处理after_save回调问题。我确信有一个简单的解决方案,但我无法弄清楚。

我有3个型号:用户,产品,出价。 Product表包含一个布尔字段“available”,默认设置为true。如果用户出价,则可用字段应设置为false。 我认为这应该适用于投标模型的回调。 我可以通过键入以下内容来访问和设置控制台中的可用字段:     b = Bid.last     b.product.available = false     =>假 但是我无法通过控制器更改它,所以我认为它不会执行回调。我究竟做错了什么? 谢谢大家的帮助!

product.rb

class Product < ActiveRecord::Base

has_one :bid
belongs_to :user
end

bid.rb

class Bid < ActiveRecord::Base
attr_accessible :product_id, :user_id, :product
belongs_to :product
belongs_to :user
after_save :set_product_status

def set_product_status
self.product.available = false
end
end

bids_controller.rb

...
def create
@user = current_user
product = Product.find(params[:product_id])
@bid = @user.bids.build(product: product)

respond_to do |format|
if @bid.save
...

1 个答案:

答案 0 :(得分:0)

由于出价属于产品,您也应该保存产品。

def set_product_status
  self.product.available = false
  self.product.save
end