2010-01-17 5 views
1

모델이 Vote이고 after_validation 콜백을 사용하고 있습니다.파인더에서 'self'를 호출하는 것에 대해 혼란스러워합니다.

class Vote < ActiveRecord::Base 

    after_validation :destroy_reciprocal_votes 

    belongs_to :voteable, :polymorphic => true 
    belongs_to :voter, :polymorphic => true 

    private 

    def destroy_reciprocal_votes 
    votes = Vote.delete_all(:vote => false, :voteable_type => "Recipe", :voteable_id => self.voteable_id, :voter_type => "User", :voter_id => self.voter_id) 
    end 
end 

당신이 내 방법 destroy_reciprocal_votes에, 나는 self.voteable_idself.voter_id라고 볼 수있다, 왜이 반환 nil합니까? 여기에 내 ID를 어떻게 검색해야합니까? 내가 콘솔에서 작업을 수행 할 때

는 그것을 잘 작동합니다 : 당신만큼 당신이 연결을 지정할로 ID를 참조 할 필요가 없습니다

>> voteable_id = "3" 
>> voter_id = "162" 
>> Vote.delete_all(:vote => false, :voteable_type => "Recipe", :voteable_id => voteable_id, :voter_type => "User", :voter_id => voter_id) 
+0

은 인스턴스에서 'self'를 호출하지 못하도록하는 '비공개'입니까? –

답변

1

. 이 시도 : voteable voteable_id => :

로 변경

Vote.delete_all(:vote => false, :voteable_type => "Recipe", :voteable_id => voteable, :voter_type => "User", :voter_id => voter) 

업데이트.

+0

글쎄, 그것은 DB에서 칼럼이고 다형성을 가지고 있기 때문에 내가하는 것처럼 보입니다. 그렇게 할 수 있어야한다면 조금 알려 줘야 겠어. –

+0

간단한 예제 : >> Post.find (: all, : conditions => {: user_id => User.find (: first)}) –

+0

정말 다형성 모델이기 때문에 사용자가' 기능'을 사용하고'조리법 '에 대한 투표를 할 수 있으므로 적절한 투표를 삭제해야합니다. –

관련 문제