2016-08-22 76 views
0

我希望這是很容易.... =)通過新的對象ID中創建軌道上控制器紅寶石

我有一個問題對象和favanswer對象,問題HAS_ONE favanswer,favanswer belongs_to的問題。我的問題模型中有一個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 

回答

0

SMH ...

想通了=)

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

這是因爲你指的是問題ID而不是問題。你有沒有試過'@L = Favanswer.create(favanswer_params.merge(user:current_user,question:@question)'我相信如果你引用關聯而不是外鍵,Rails將會做正確的事情 – jaydel

+0

澄清的要點:在我上面的評論中,'@question = @ answer.question_id'應該是'@question = @ answer.question'。 – jaydel

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是一個友好和善良,當你將問題的實例來命名關聯關係,它將把它掛的要求,所以你沒有需要直接更新問題。

1

Model.create返回新創建的模型的一個實例,這對您正在嘗試執行的操作很有用。這意味着:

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

將完成您所追求的。