I have a Score that belongs_to Client – and Client has_one Score.
I also want to assign the Score to User on creation. So every time a current_user creates a score for a particular client, I want the current_user.id to be stored with that Score record.
What is the best way to do that?
I was thinking that an elegant way might be a Score belongs_to User, :through Client but that can’t work.
So I am assuming the best way is to just add user_id to the Score model, and do it like that.
But then how do I assign the user_id in the Score#create?
This is how my create action looks:
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
end
This automatically assigns the current score to the client_id that is in the params[:score] hash – but it doesn’t do the same for user_id.
What gives?
As long as you have
Score.belongs_to :user, and the accompanyinguser_idcolumn in thescorestable :Let me know if you need more explanation, but I feel that the code is pretty clear.
Edit Or: Instead of
current_user.scores.new, usecurrent_user.scores.build(params[:score]), and make sure you haveUser.has_many :scores