2014-03-13 78 views
0

我有一個問題模型,has_many答案(模型),其中每個belongs_to一個問題。製作一個變量跨兩個控制器可用

對於每個問題的show頁面,例如/ questions/1或/ questions/2,我希望用戶輸入答案。

表單正在工作,但問題是,它似乎問題變量沒有進行到表單發佈到...的思考答案控制器?在AnswersController NilClass在@answer = @ question.answers.build創建方法:

class QuestionsController < ApplicationController 

def show 
    @question = Question.find(params[:id]) 
    @answer = @question.answers.build 
end 


class AnswersController < ApplicationController 

def create 
    @answer = @question.answers.build 
    redirect_to 'questions/:id' 
end 

我發現了一個錯誤:無未定義的方法`答案。

是時候使用全局變量了嗎?

順便說一句,簡短的版本是,我試圖做一個Quora /堆棧交換克隆。有沒有一個教程已經這樣做了,因爲男人會是驚人的...

+0

在你的'Question'模型,你用'accept_nested_attributes_for:answers'? –

+0

不,我不確定那是什麼,但那條線能解決我的問題嗎? – james

回答

1

所以它不應該。這絕對不是全球變量的地方。

當你爲一個問題創建一個答案時,它應該發佈到/questions/2/answers之類的東西,它應該指向AnswersController#create動作。

在該操作中,您可以使用params[:question_id](來自URL)加載正確的問題記錄,然後爲該問題創建答案。

(您想創建,而不是建立在你的控制器,還您重定向是不正確的)

+0

我明白你在說什麼了,但我並不確定實施。我有'<%= form_for(@answer),:url => url_for(:controller =>'Answers',:action =>'Create')do | f | %>'但這會指向正確的控制器/操作,但不是正確的URL。我是否需要從根本上改變我的路線? – james

+0

是的,你這樣做。您也不需要爲表單指定URL - Rails知道如果「@ answer」是新記錄,則它應該發佈到創建路由,並且如果它被保留,則它應該發佈到更新路由。 – sevenseacat

+0

啊好吧,所以這是有道理的,因爲我可以嵌套資源。雖然現在這個表單會拋出一個錯誤,它表示沒有'answers_path'這意味着我需要一個URL嗎?對不起,我從來沒有這樣做過。 – james

相關問題