我在事件模型中有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_for [:event, @event_question] do |f| %>
#form stuff
<% end %>
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
答案 0 :(得分:0)
我认为这是在你的路线上。将其更改为如下所示:
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
,它将显示负责它们的操作,路径和控制器。
答案 1 :(得分:0)
使用
form_for(@event_question, :url => event_event_questions_path(@event)) do |f|
我不确定如何通过其他方式(在问题中)传递@event,但假设你可以,两种方法都应该有效。