2013-04-11 2 views
0

사용자 모델이 has_many :comments이고 의견 모델이 belongs_to :user입니다.belongs_to 모델 after_save 업데이트

내가 을 설정하기 위해 comment.ratings을 수집하려고하는데, 나는이 모델에 after_save 메소드를 가지고있다. 그러나 이것은 결코 부르지 않습니다. 여기

은 방법 :

def update_user_rating 
    user = User.find(self.is_about) 
    user.trip_rating = (Comment.find_all_by_is_about(self.is_about).collect { |comment| comment.rating }.sum)/
    Comment.find_all_by_is_about(self.is_about).count 
end 

내가 루비 코드를 확인하고 콘솔에서 작동, 그래서이 아니 루비 코드를 가정합니다.

예 모델에는 after_save : update_user_rating도 있습니다.

내가 뭘 잘못하고 있는지 이해하려고합니까?

편집 : 디버거를 기반으로 user.trip_rating =의 첫 번째 부분은 절대로 실행되지 않습니다. 의미는 그 라인에 next을하려고했지만 그 라인이 문제라고 가정하고 있으므로 결코 통과하지 못했습니다. 레일을 다시 확인하면서 콘솔이 작동한다는 것을 알았습니다. 이해가 안돼!

솔브레드 : 다음은 내가 맘에 들지 않지만 문제를 해결 한 방법입니다. after_save 콜백을 제거하고 메서드를 사용자 모델에 추가하여 자체 등급을 계산하고 컨트롤러에서 호출했습니다.

+0

user = User.find(self.user_id) 또는 user = User.find_by_is_about(self.is_about)를 사용해보십시오. 끝 부분에'user.save'를 입력하십시오. – Zippie

+0

나는 그것을 추가했지만 여전히 아무것도 변경되지 않았습니다. 고마워요. – eytanfb

+0

당신은'user.save! '를 시도해 볼 수 있습니까? 저장하는데 문제가 있다면 오류가 있습니다. – Zippie

답변

0

아마도 update_user_rating이 호출되었지만 메서드의 일부 줄에 오류가 발생했을 수 있습니다.

난 당신이 사용자 개체를 저장하지 않는 것 같아요

+1

아마도'self.is_about'이 의미하는 것도 모르지만, 아마도'user = User.find (self.user_id)'여야합니다. – Zippie

+0

아, 주석이 아닌 사용자의 콜백 인 부분을 놓쳤습니다. – Huy

+0

user_id는 주석의 소유자이고 is_about은 어떤 사용자인지를 나타냅니다. – eytanfb

관련 문제