Rails嵌套路由问题

时间:2014-11-13 02:31:06

标签: ruby-on-rails ruby rails-routing

我在事件模型中有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

2 个答案:

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