2010-04-30 1 views
20

개체에 to_json 메서드를 사용하고 :methods 인수를 사용하려고합니다. 내 모델 (Drop)에 is_favorited_by_user?이라는 메서드가 있습니다. 이 메서드는 current_user의 인수를 사용하고 사용자가 드롭을 선호하는지 확인합니다. 이 인수를 to_json 메소드를 통해 어떻게 전달할 수 있습니까?Ruby to_json : arguments arguments

답변

36

당신은 모델에 current_user 속성을 추가하고 to_json

attr_accessor :current_user 

    def is_favorited_by_user?(user=nil) 
    user ||= current_user 
    # rest of your code 
    end 


@drops.current_user = current_user 
render :json => @drops.to_json(:methods => :is_favorited_by_user?) 
+0

그게 효과가! 고마워, 보타! –

+4

인덱스 작업에서 render : json => Drop.all을 수행 할 때이 솔루션을 어떻게 확장합니까? current_user는 어디에 할당합니까? 모델에서'cattr_accessor : current_user'를 –

+3

, 컨트롤러에서'Model.current_user = current_user'를 선택합니다. –

4

to_json 메서드는 인수를 취하는 것이 아니라 "getter"메서드를 사용합니다. (일반적으로 사람은 당신의 DB 속성에 기반하여 만들었습니다.)

여기 예, 없음 인수를 전달하십시오 : 당신이 뭔가 정의를 수행하려는 경우

http://apidock.com/rails/ActiveRecord/Serialization/to_json

, 당신은 방법을 만들어야 그 원하는 정보의 해시를 만든 다음 해당 해시를 json으로 변환합니다.

+1

내 모델 내에서 CURRENT_USER 변수를 가져올 수있는 방법이 있나요을 실행하기 전에 설정, 그래서 인수를 전달 할 필요가 없습니다 수 있습니까? –

+0

@JamesFinley 모델은 컨트롤러 또는 http 요청의 상태를 인식하지 못합니다. current_user는 요청의 일부이며 위에서 언급 한 다중 스레드 문제로 인해 글로벌 방식으로 모델에 노출되어서는 안됩니다. 메서드 매개 변수로만 전달되어야합니다. – hammady