Rails 4: Insérer L'Attribut Dans Les Paramètres
Dans Rails 3, Il était possible d'insérer un attribut dans les paramètres comme ceci:
params[:post][:user_id] = current_user.id
J'essaie de faire quelque chose de similaire dans Rails 4, mais sans chance:
post_params[:user_id] = current_user.id
. . . .
private
def post_params
params.require(:post).permit(:user_id)
end
Rails ignore cette insertion. Il ne jette aucune erreur,il échoue tranquillement.
61
demandé sur
nullnullnull
2013-05-14 00:27:27
3 réponses
Trouvé la réponse ici. Plutôt que d'insérer l'attribut à partir de l'action du contrôleur, vous pouvez l'insérer dans les paramètres de définition d'une fusion. Pour développer mon exemple précédent:
private
def post_params
params.require(:post).permit(:some_attribute).merge(user_id: current_user.id)
end
127
répondu
nullnullnull
2013-05-22 18:48:13
En plus de la réponse de @timothycommoner, vous pouvez également effectuer la fusion par action:
def create
@post = Post.new(post_params.merge(user_id: current_user.id))
# save the object etc
end
private
def post_params
params.require(:post).permit(:some_attribute)
end
32
répondu
Numbers
2014-06-18 00:04:10
Comme alternative pour ce cas, vous pouvez exiger l'attribut pass via scope
:
current_user.posts.create(post_params)
2
répondu
BitOfUniverse
2016-07-12 10:29:08