嵌套表单以路由到正确的控制器操作

时间:2017-01-17 12:13:45

标签: ruby-on-rails

路线定义

  resources :interruptions do
    collection do
      post :pause
      post :restart
    end
  end

但是,在intervento_controller show action中,声明了@interruption = Interruption.new,用于创建相关记录的表单

<%= form_for @interruption, url: pause_interruptions_path do |f| %>
  <%= f.hidden_field :intervento_id, value: @intervento.id %>
  <%= submit_tag "Pausa", name: 'pausa_intervento' %>
<% end %>          

rails正在路由到intervento操作,而不是form_for url声明中所述的操作。

Started PATCH "/interventos/32" for ::1 at 2017-01-17 13:04:49 +0100 
Processing by InterventosController#update as HTML  
Parameters: {"utf8"=>"✓", [...] "interruption"=>{"intervento_id"=>"32"}, "pausa_intervento"=>"Pausa", "id"=>"32"}

Intervento模型确实允许accepts_nested_attributes_for :interruptions,但我预计这不是必需的,因为表单声明了要路由到的动作。此外,一次只能创建或编辑一条记录。

如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您的pause行动是在收集时定义的,即/interventos/post, 但是,您的表单是为interruption实例定义的。

你认为你打算这样做

  resources :interruptions do
    member do
      post :pause
      # post :restart
    end
  end

您还需要相应地更改pause_interruptions_path

另请尝试使用f.submit submit_tag似乎被视为输入字段。