2012-08-10 79 views
1

我正在處理after_save回調中的問題。我確信有一個簡單的解決方案,但我無法弄清楚。Rails回調after_save未設置屬性

我有3個型號:用戶,產品,出價。產品表包含布爾字段「available」,該字段默認設置爲true。如果用戶放置出價,則可用字段應設置爲false。 我認爲這應該與出價模型的回調一起工作。 我可以訪問並通過鍵入設置在控制檯中可用的字段: B = Bid.last b.product.available =假 =>假 但是我不能經由控制器改變它,所以我認爲它不不執行回調。我究竟做錯了什麼? 謝謝大家的幫助!

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 
... 

回答

0

由於投標屬於_to產品,您應該保存產品。

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

謝謝!這工作! 我發現,它也將與: product.available = false product.save 因此,它似乎也不需要「自我」的參考。 非常感謝您的幫助! – 2012-08-10 13:27:09