2012-12-12 2 views
0

내 params에서 클래스 메서드에 간단한 변수를 전달하려고하지만 작동하지 않는 것 같습니다. 이것은 초등식 인 것처럼 보이지만 나는 여전히 배우고 있습니다. 누군가가 왜 이것이 효과가없고 대안을 제시하는지 설명 할 수 있습니까? 내 코드는 아래와 같습니다.내 매개 변수가 내 모델로 전달되지 않는 이유는 무엇입니까?

컨트롤러

@profile = current_user.profile 
@dogs = Dog.by_profile(params[@profile]) 

모델

def self.by_profile(profile) 
    Dog.where(kids_under_10: profile.kids_under_10) 
end 

* 참고 : profile.kids_under_10은 부울입니다. 수동으로 true 또는 false로 바꾸면 모든 것이 올바르게 작동합니다.

답변

4

params은 URL 매개 변수를 포함하는 특수 레일 해시입니다. 그래서 귀하의 코드는 사용자 프로필의 문자열 버전을 포함하는 요청과 함께 전달 된 url 매개 변수를 찾고 있습니다. 이것은 분명히하고 싶은 일이 아닙니다. Dog.by_profile(@profile)

당신은 PARAMS 부분을 원하지 않는, 또는 당신은해야 미친 뭔가를하려는 : 당신이 레일 모델 메소드를 호출 할 때

, 당신은 다른 방법과 같은 인수로 호출 리팩토링 됨 :

+0

감사를 할 생각! –

0

params에 대한 키 값은 params[:profile]과 같아야합니다.

그래서 @dogs = Dog.by_profile(params[:profile])을 시도해보십시오.

0

params는 요청에서 오는 해시이기 때문에. 당신이하고있는 일은 틀린 인스턴스 변수로 해시를 검색하려고 시도하는 것입니다.

내가 무엇을 의미하는 설명 및 솔루션에 대한 너무 많은 params[:profile]하거나 @profile

관련 문제