Comment supprimer un champ de params

Mon formulaire d’inscription, qui est un formulaire pour le modèle Utilisateurs, prend une valeur de chaîne pour la société. Cependant, je viens de faire un changement tel que les utilisateurs appartiennent à des entresockets. Par conséquent, je dois transmettre un object de la société au modèle Utilisateurs.

Je veux utiliser la valeur de chaîne du formulaire pour obtenir un object de la société:

@user.company = Company.find_by_name(params[:company]) 

Je crois que le travail ci-dessus fonctionne, mais la forme transmet la: company (qui est la chaîne) dans le modèle lorsque j’appelle:

 @user = User.new(params[:user]) 

Par conséquent, je veux savoir (et ne trouve pas comment) pour supprimer le paramètre: company avant de le transmettre au modèle User.

Vous pouvez supprimer une paire clé / valeur d’un hachage en utilisant Hash#delete :

 params.delete :company 

Si elle est contenue dans params [: user], alors vous utiliseriez ceci:

 params[:user].delete :company 

Vous devriez probablement utiliser hash.except

 class MyController < ApplicationController def explore_session_params params[:explore_session].except(:account_id, :creator) end end 

Il accomplit 2 choses: vous permet d'exclure plus d'une clé à la fois et ne modifie pas le hachage d'origine.

 respond_to do |format| if params[:company].present? format.html {redirect_to(:controller=>:shopping, :action=>:index)} else format.html end 

cela va supprimer les parameters de l’URL

La manière correcte d’y parvenir est d’utiliser strong_params

 class UsersController < ApplicationController def create @user = User.new(user_params) end private def user_params params.require(:user).permit(:name, :age) end end 

De cette façon, vous avez plus de contrôle sur les parameters à transmettre au modèle