2016-09-07 3 views
1

내 레일 컨트롤러에서, pry 세션에서 내 params 해시는 nil입니다. request.params에 예상 해시가 있습니다.왜 내 params 해시가 없습니까?

params = … 행을 주석 처리하면 params이 정상으로 돌아갑니다.

class UsersController < Clearance::UsersController 
    skip_before_filter :verify_authenticity_token 

    def update 
    binding.pry 
    params = params.require(:user).allow(:foo) 
    end 
end 

무엇이 원인 일 수 있습니까?

답변

0

params 해시는 사용자가 페이지를 요청할 때 얻는 것입니다. 예를 들어 :

https://www.example.com/index.html?username=john&[email protected] 

params 해시

{username: 'john', email: '[email protected]'} 

것입니다 그리고 당신은 다음 params[:username] 같이 평가할 수 있습니다.

강력한 매개 변수를 사용하여 사용자가 무엇을 업데이트 할 수 있는지 또는 설정할 수 없는지를 설정하는 것처럼 보입니다. 이 경우, 당신이해야 할 것은이 내용은 사용자가 foo 속성과 아무것도를 업데이트 할 수

def update 
    user = User.find(params[:id]) 
    user.update_attributes(params.require(:user).permit(:foo)) 
end 

입니다.

이것은 매우 일반적이므로 user_params이라는 전용 메서드를 작성하고 save을 호출 할 때 해당 메서드를 호출하는 것이 표준입니다.

def update 
    user = User.find(params[:id]) 
    user.update_attributes(user_params) 
end 

private 
    def user_params 
    params.require(:user).permit(:foo) 
    end