2012-08-10 3 views
1

after_save 콜백에 관한 문제를 다루고 있습니다. 나는 쉬운 해결책이 있다고 확신하지만, 그것을 이해할 수는 없다.Rails 콜백 after_save 속성을 설정하지 않음

나는 User, Product, Bid의 3 가지 모델을 가지고 있습니다. Product 테이블에는 "사용 가능"인 부울 필드가 있으며 기본값은 true로 설정됩니다. 사용자가 입찰가를 지정하면 사용 가능한 입력란은 false로 설정되어야합니다. 입찰가 모델에서 콜백과 함께 작동해야한다고 생각했습니다. 콘솔에서 사용할 수있는 필드에 액세스하여 설정할 수 있습니다. b = Bid.last b.product.available = false => 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 
... 

답변

0

때문에 제품을 저장하려면 제품을 저장해야합니다.

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

고맙습니다! 그게 효과가 있었어! product.available = false product.save 그래서 "self"- 참조를 필요로하지 않는 것 같습니다. 도움을 주셔서 감사합니다. –

관련 문제