2009-10-26 3 views
0

나는이위험한 ActiveRecord 동작?

def vote(options) 
    options[:post] = self 
    vote = self.votes.create(options) 
    return vote if vote.valid? 
    nil 
end 

Shouldn '를 작동합니까이

def vote(options) 
    vote = self.votes.create(options) 
    return vote if vote.valid? 
    nil 
end 

작동하지 않는 투표 예를

를 생성하는 투표 방법과 포스트 클래스가 t .create 전화가 자동으로 추가합니다 : 게시물 협회?

설명

클래스 포스트 < 액티브 :: 자료 has_many : 투표 끝

클래스 투표 < 액티브 :: 자료 belongs_to : 사용자 : counter_cache => 진정한 belongs_to : 끝을 게시

+1

어떻게이 작동하지 않습니다

어쩌면 당신은 단지로 다시 작성해야? 더 자세한 설명이 필요합니다. –

+0

추가 세부 사항이 추가되었습니다. – Alexandre

답변

0

하시겠습니까?

has_many :votes 

은 게시 모델에 선언 되었습니까?

어떤 시점에서 객체의 라이프 사이클에서 투표 메소드를 호출합니까? 그것은 콜백 메소드의 일부입니까?

+0

오브젝트가 작성 (저장) 된 후 vote 메소드를 호출합니다. vote 메소드 호출은 콜백의 일부가 아닙니다. – Alexandre

+0

has_many : votes가 self.votes.create보다 많으면 두 경우 모두 오류가 발생합니다. – EmFi

+0

@Alexandre 오브젝트가 생성 된 후에 vote를 호출한다면 왜 새로운 오브젝트를 생성합니까? – EmFi

0

self.votes.create!(options)으로 작성하면 디버그하기가 쉬울 것입니다. 오류 메시지와 함께 예외가 발생할 것이기 때문입니다. 일단 문제를 해결하면이 문제를 해결할 수 있지만 문제가 해결되지 않으면 반환 할 내용을 생각해야합니다.

Post#votenil을 반환하는 것이 맞습니까? 왜 투표에 실패 했는가? 코드가 Post#vote에 의해 반환 된 nil 값을 어떻게 처리합니까?

def vote(options) 
    self.votes.create!(options) 
end 
+0

사용자가 이미 투표 한 경우 nil을 반환하며,이 경우 투표가 유효하지 않습니다. – Alexandre

+0

확인. 만들기 위해 전환 시도 했습니까! ActiveRecord의 오류가 무엇인지 확인 하시겠습니까? –

관련 문제