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,但假设你可以,两种方法都应该有效。