我最近加入了Rails应用开发(Rails3)的世界,我可能会滥用资源丰富的路由。
默认的资源路由为我经常使用的URL提供了一些非常方便的帮助方法。我的问题是我有控制器,我将路由指定为资源丰富,只是为了利用这些辅助方法。我有一些基本的网站导航,没有资源业务。
resource :home do
member do
get 'main'
get 'about'
get 'login'
get 'help'
end
end
有没有更好的方法来做我一直在做的事情?任何不需要我每次有新的控制器操作时手动添加路由条目的东西吗?
为了澄清,我想为控制器指定路由,而不必显式添加任何新操作,但我也希望它自动生成帮助方法。到目前为止,我必须为我想要的每个动作明确添加路由。我可以通过这样做(以非智能的方式)获得类似的东西,
match 'home/about' => 'home#about'
但我不想写出那些不符合惯例的路线。
答案 0 :(得分:2)
这是另一个更简单的问题。只需在routes.rb
match ":controller/:action"
它将直接映射到指定控制器的指定操作。如果你愿意,你可以更具体一点。例如,使用get
代替match
来限制HTTP GET请求,指定应用程序控制器等。
get ":controller/:action", :constraints => { :controller => /home|help/ }
答案 1 :(得分:1)
您可以查看控制器的公共实例方法并自动生成路由。
# routes.rb
HomeController.public_instance_methods(false).select{|m| !(m.to_s =~ /^_/)}.each do |m|
match "home/#{m}", :action => m, :controller => HomeController, :as => "home_#{m}"
end
这将采用控制器中的显式(非继承)公共实例方法,并选择不以下划线开头的方法(因为下划线的是生成过滤器的方法,休息是实际行动)。然后它将为每个生成一个命名路由。
请记住,routes.rb
仅在服务器启动时处理,因此您必须在添加新操作后重新启动服务器。