嵌套资源的表单

我已经完成了大量的form_for嵌套资源问题,无法让任何解决方案适合我。 我想是时候问一个个性化的问题了。

我有两个模型,工作和问题,工作有很多问题和问题属于工作。

我使用scaffolding创建控制器和模型,然后嵌套routes.rb中的资源。

root :to => "pages#home" resources :jobs do resources :questions end get "pages/home" get "pages/about" get "pages/contact" class Job < ActiveRecord::Base has_many :questions end class Question < ActiveRecord::Base belongs_to :job end 

现在我正在尝试访问’/ jobs / 1 / questions / new’并继续获取

问题#new中的NoMethodError

当代码出现时,我开始使用错误No route matches {:controller =>“questions”}

  

我知道这是错的,所以我开始尝试其他组合,但没有一个工作。

我试过了

   

   

  

在一堆其他组合中,并没有工作。

这是我的rake路线的链接:git clone https://gist.github.com/1032734

任何帮助表示赞赏,如果您需要更多信息,请告诉我,谢谢。

我只是将URL作为额外选项传递:

 <%= form_for(@question, :url => job_questions_path(@job)) do %> 

编辑:

还试试:

 form_for([@job, @question]) 

这就是我解决我的问题:)

在您的questions/_form.html.erb

 <%= form_for [@job, @question] do %> 

为此,您需要工作的ID。 您将按如下方式传递它:在questions_controller.rb

 def new @job = Job.find(params[job_id]) @question = @job.questions.build end 

构建( .build )类似于在上面的代码中使用new( .new ),仅在旧版本的rails中有差异; 铁轨2下来。

现在进行创建操作(仍然在questions_controller.rb

 def create @job = Job.find(params[:job_id]) @question = @job.questions.build(question_params) end 

如果仅使用这些,则问题模型中的job_id和user_id字段将为空。 要添加ID,请执行以下操作:在questions_controller.rb中将job_id添加到job_params,如下所示:

 def question_params params.require(:question).permit(:ahaa, :ohoo, :job_id) end 

然后传递用户的id(如果你使用Devise),执行:

 def create @job = Job.find(params[:job_id]) @question = @job.questions.build(question_params) @question.user_id = current_user.id end