2016-09-07 1 views
1

Dans mon contrôleur de rails, dans une session forcée, mon hash params est nil. request.params a le hachage attendu. Si je commente la ligne params = …, params revient à la normale.Pourquoi mes params sont-ils nuls?

class UsersController < Clearance::UsersController 
    skip_before_filter :verify_authenticity_token 

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

Ce qui pourrait être à l'origine de cela?

Répondre

0

Le hachage params est ce que vous obtenez lorsque l'utilisateur demande la page. Par exemple:

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

Le hachage params serait

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

Et vous pouvez évaluer alors comme params[:username].

On dirait que vous essayez d'utiliser des paramètres forts pour définir ce que l'utilisateur peut ou ne peut pas mettre à jour. Dans ce cas, ce que vous devez faire est

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

Cela ne permettra à l'utilisateur de mettre à jour l'attribut foo et rien d'autre.

Parce que cela est si commun, il est standard d'écrire une méthode privée appelée user_params et appelez simplement cette méthode lorsque vous appelez save.

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

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