J'ai un Score
qui appartient à Client
- et Client
has_one Score
.Comment attribuer un nouvel objet à current_user et à une association has_one?
Je veux également affecter le Score
à User
à la création. Donc, chaque fois qu'un current_user
crée un score pour un client particulier, je veux que le current_user.id
soit stocké avec cet enregistrement Score
.
Quelle est la meilleure façon de faire cela?
Je pensais qu'une manière élégante pourrait être un Score belongs_to User, :through Client
mais cela ne peut pas fonctionner.
Donc, je suppose que le meilleur moyen est d'ajouter simplement user_id
au modèle Score
, et faites-le comme ça. Mais alors comment affecter le user_id
dans le Score#create
?
Voici comment créer mes actions semble:
def create
@score = current_user.scores.new(params[:score])
respond_to do |format|
if @score.save
format.html { redirect_to @score, notice: 'Score was successfully created.' }
format.json { render json: @score, status: :created, location: @score }
else
format.html { render action: "new" }
format.json { render json: @score.errors, status: :unprocessable_entity }
end
end
fin
Cela affecte automatiquement le score à la client_id
qui est dans le hachage params[:score]
- mais il ne fait pas la même chose pour user_id
.
Ce qui donne?
ne doit pas '@score = current_user.scores.new (params [: Partition])' faire? Pourquoi est-ce différent? – marcamillion
Si ce n'est pas le cas, à quoi bon le faire comme je l'ai fait - ou n'y a-t-il pas lieu de le faire comme ça? – marcamillion
'current_user.scores' retourne une instance de Array (ou' ActiveRecord :: Relation' en fonction de la configuration de l'association) donc vous aurez une erreur. Vous pouvez utiliser l'assistant Rails, 'current_user.scores.build (params [: score])' qui fera ce que vous cherchez, mais je trouve qu'il est plus clair de le faire comme je l'ai spécifié (ils sont essentiellement les même si). – bricker