我需要在名为 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 /预览
所以这对我不起作用,因为我希望动作是创建新资源的地方,而不是已经创建的资源的动作。
我该如何解决这个问题?
答案 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
。