在rails上创建控制器ruby中的新对象ID

时间:2016-08-22 18:12:03

标签: ruby-on-rails ruby database-relations

我希望这很容易...... =)

我有一个问题对象,一个最喜欢的对象,问题has_one favanswer,favanswer belongs_to question。我的问题模型中有一个favanswer_id列和索引,我试图将新发布的favanswer_id传递给相应的问题对象' favanswer_id字段。也许它更多......或者更简单......比这更复杂。但是在favanswer_controller中,我在创建动作中有以下内容,而我只想弄清楚如何纠正第6行,或者无论我需要做什么,因为没有6它工作正常,它只是没有更新我的问题模型......帮助?

  1 def create
  2
  3  @answer = Answer.find(params[:answer_id])
  4  @question = @answer.question_id
  5  Favanswer.create(favanswer_params.merge(user: current_user, question_id: @question))
  6  Question.update(@question, :favanswer_id => "HOW DO I PASS THE NEW FAVANSWER ID HERE?")
  7  redirect_to question_path(@question)
  8
  9 end

3 个答案:

答案 0 :(得分:1)

我认为你在这里犯的错误是指直接关联的外键。相反,依赖关联作为对象。创建Favanswer时,传入@answer.question对象而不是id。另外,请勿将其传递给question_id,而应传递给question

def create
  @answer = Answer.find(params[:answer_id])
  @question = @answer.question
  Favanswer.create(favanswer_params.merge(user: current_user, question:     @question))
  redirect_to question_path(@question)
end

Rails友好且善良,当您将Question实例分配给指定的关联时,它会根据需要将其挂起,因此您无需直接更新问题。

答案 1 :(得分:1)

Model.create返回新创建的模型的实例,这对您尝试执行的操作很有用。这意味着:

@favanswer = Favanswer.create(favanswer_params.merge(user: current_user, question_id: @question))
Question.update(@question, :favanswer_id => @favanswer.id)

将完成你所追求的目标。

答案 2 :(得分:0)

... SMH

想出来=)

@L = Favanswer.create(favanswer_params.merge(user: current_user, question_id:    @question))
Question.update(@question, :favanswer_id => @L.id)