2017-06-29 45 views
0

我试图设置一些轨道路由指向同一个控制器,可以说“mycontroller”有3个动作,并且不支持资源。这3个动作是GET,我们姑且称之为“动作1”,“动作2”和“ACTION3”,所以我最终的每一个动作一旦设置类似Rails路由 - 更短的非资源路径

get "mycontroller/action1" => "mycontroller#action1", as: :action1_mycontroller 

。有没有办法像

resourceless :mycontroller do 
    get 'action1' 
    get 'action2' 
    get 'action3' 
end 

在此先感谢。

+0

似乎可以通过使用“名称空间”命名空间完成:mycontroller do get“action1”end' – Lucho

回答

1

如果你做这样的事情:

resources :my_controller, :only => [] do 
    collection do 
    get 'action1' 
    get 'action2' 
    get 'action3' 
    end 
end 
rake routes

然后,你会看到:

action1_my_controller_index GET /my_controller/action1(.:format) my_controller#action1 
action2_my_controller_index GET /my_controller/action2(.:format) my_controller#action2 
action3_my_controller_index GET /my_controller/action3(.:format) my_controller#action3 

您可以as:拨弄,只要你喜欢他们得到你的路径名,我怀疑。

或者,如果你这样做(如你所说):

namespace :mycontroller do 
    get "action1" 
    get "action2" 
    get "action3" 
end 

你得到:

mycontroller_action1 GET /mycontroller/action1(.:format) mycontroller#action1 
    mycontroller_action2 GET /mycontroller/action2(.:format) mycontroller#action2 
    mycontroller_action3 GET /mycontroller/action3(.:format) mycontroller#action3 

后者(你)是更好的。

+0

我试图避免“资源”,因为我没有模型来支持它。不过谢谢! ;) – Lucho

+0

我明白了。这就是为什么我做':only => []'哪(1)没有生成足够的路由,但是(2)允许''集合'语法。 – jvillian

+1

您的版本在操作名称前加上了一个好处,感觉更自然。谢谢! – Lucho