2016-09-07 4 views
1

私のレールコントローラでは、プライムセッションで、私の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 
関連する問題