Rails - Comment puis-je configurer l'identifiant du nouveau record du modèle a beaucoup de / appartient à la relation?
-
12-10-2019 - |
Question
Je suis en train de créer un enregistrement que dans un has_many et belongs_to relation
messages hasMany utilisateur et les messages belongto utilisateur
@post = Post.new( params[:post], :user_id => current_user.id )
@post.save
mais je suis continue de recevoir un faux numéro d'erreur d'arguments.
Puis-je définir le champ user_id du modèle Post automatiquement en quelque sorte? J'utilise ce qui est où Devise l'appel current_user vient.
La solution
Un couple de différentes manières:
@post = Post.new(params[:post])
@post.user_id = current_user.id
@post.save
Ou:
@post = current_user.posts.build(params[:post])
@post.save
Autres conseils
Fusionner le hachage params[:post]
avec {:user_id => current_user.id}
:
@post = Post.new(params[:post].merge({:user_id => current_user.id}))
@post.save
Voir Hash#merge
Si vous utilisez has_many simple et belongs_to associations, il n'a pas besoin d'être une colonne de post_id dans la table des utilisateurs. Il doit seulement être une colonne user_id dans le tableau des messages
Avec que vous pouvez faire:
@post = Post.new(params[:post])
@post.user_id = session[:user_id] #or an equivalent.
@post.save
@user.posts << @post