向资源的路由添加第二个“新”操作

时间:2012-06-19 14:03:54

标签: ruby-on-rails ruby-on-rails-3 routing routes action

我需要在名为 Things 的资源中添加第二个“新”动作(称为* different_new *)。我希望它能解决:

things/different_new

我在* things_controller.rb *

上定义了一个different_new动作

rails guide to routing之后,我看到了这个示例,用于添加自定义操作作为路由:

resources :photos do
  member do
    get 'preview'
  end
end

但是,像这样添加的任何操作都会添加到特定资源中。例如,上面会产生这样的路线:

照片/:photo_id /预览

所以这对我不起作用,因为我希望动作是创建新资源的地方,而不是已经创建的资源的动作。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

与成员类似,还有一个集合选项:

resources :photos do
  collection do
    get 'preview'
  end
end

或者你的情况:

resources :things do
  collection do
    get 'different_new'
  end
end

这在导轨路由指南的2.9.2节中有所描述。

答案 1 :(得分:2)

新操作(在这种情况下,您的different_new操作)与任何现有资源都没有关联,因此它应该是一个收集路由:

resources :things do
  get :different_new, :on => :collection
end

它会生成类似things/different_new的路径。但是,与预定义的new操作不同,url帮助程序将是复数形式 - different_new_things_path