get类型的收集路由重定向以显示操作

时间:2016-06-15 08:41:05

标签: ruby-on-rails ruby ruby-on-rails-4

我已经在get类型的collection方法中定义了一个路由,但是它重定向以显示控制器的动作而不是merge_fields动作

resources :notification_templates do 
    collection do
      get :merge_field_keys
    end
  end

所以它的路径是/notification_templates/merge_field_keys

现在notification_templates_controller将其重定向到show method并将merge_field作为id。

class NotificationTemplatesController < ApplicationController

  def merge_field_keys
  end

end

3 个答案:

答案 0 :(得分:0)

您的方法名称为merge_field_keys,其路线显示为merge_fields。尝试更改其中一个

resources :notification_templates do 
  collection do
    get :merge_field_key
  end
end

OR

class NotificationTemplatesController < ApplicationController
  def merge_fields
    ...
  end
end

答案 1 :(得分:0)

如果你运行rake routes,你会发现,你所说的不会发生 /notification_templates/merge_field_keys/notification_templates/:id之前定义,当您从服务器Rails请求开始匹配第一个merge_field_keys路径时,如果所有路径都不匹配,则会调用show操作,在/notification_templates之后传递id param。

可能您已定义resources :notification_templates两次,并且您已将其置于上述内容之上,请运行rake routes并确保,如果您甚至不需要展示操作,则可以执行以下操作:

resources :notification_templates, only: [:index, :create, :update, :destroy] do 
  collection do
    get :merge_field_keys
  end
end

您也可以从此数组中移除您不使用[:index, :show, :create, :update, :destroy]

的内容

答案 2 :(得分:0)

试试这些:

redirect_to:controller =&gt; &#39; notification_templates&#39;,:action =&gt; &#39; merge_field_keys&#39;