2014-03-13 46 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

相关问题