Rails嵌套路由问题

我在事件模型中有Q + A模型,并且在理解嵌套路由如何工作方面存在问题。 我得到一个No route matches {:action=>"create", :controller=>"event_questions" and缺少必需的键:[:event_id]`

我的问题表单现在位于我的show.hrml.erb中,用于我的事件模型。 一些关系的东西来自neo4j gem,所以它不是标准的,但问题不应该与此有关。 据我所知,我发布到/ events / events_id / event_questions

events_controller.rb

 def show @event = Event.find(params[:id]) @event_question = EventQuestion.new end 

event.rb

  has_many :out, :event_questions, type: 'questions_of' 

event_question.rb

  has_one :in, :events, origin: :event_questions 

事件/ show.html.erb

  #form stuff  

event_questions_controller.rb

 def create @event_question = EventQuestion.new(event_question_params) if @event_question.save @event = Event.find(params[:event_id]) @event_question.update(admin: current_user.facebook_id) @event_question.events << @event redirect_to @event else redirect_to :back end end 

的routes.rb

 resources :events do resources :event_questions, only: [:create, :destroy] end 

我想这是在你的路线上。 将其更改为如下所示:

 resources :events do resources :questions, controller: 'event_questions`, only: [:create, :destroy] end 

那将给你http://youraddress/event/:event_id/questions并将它放在预期的控制器中。 确保它是event_questions.rb而不是events_questions.rb 。 从终端,也运行rake routes ,它将显示负责它们的动作,路径和控制器。

得到了它

form_for(@event_question, :url => event_event_questions_path(@event)) do |f|

我不确定如何通过其他方式(在问题中)传递@event,但假设你可以,两种方法都应该有效。