如何为current_user和has_one关联分配新对象?

时间:2012-10-12 21:28:31

标签: ruby-on-rails ruby-on-rails-3

我有Score属于Client - 和Client has_one Score

我还想在创建时将Score分配给User。因此,每当current_user为特定客户创建分数时,我希望current_user.idScore条记录一起存储。

最好的方法是什么?

我认为优雅的方式可能是Score belongs_to User, :through Client,但这不起作用。

所以我假设最好的方法是将user_id添加到Score模型中,并按照这样做。

但是,如何在user_id中分配Score#create

这就是我的创建操作的外观:

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

这会自动将当前得分分配给client_id哈希中的params[:score] - 但user_id不会执行相同操作。

是什么给出了?

1 个答案:

答案 0 :(得分:1)

只要您拥有Score.belongs_to :user,以及user_id表格中附带的scores列:

def create
  @score = Score.new(params[:score])
  @score.user = current_user

  ...
end

如果您需要更多解释,请告诉我,但我觉得代码非常清楚。

修改或:代替current_user.scores.new,使用current_user.scores.build(params[:score]),并确保您拥有User.has_many :scores