Rails3:适当使用路由和资源

时间:2010-11-14 16:18:07

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

我最近加入了Rails应用开发(Rails3)的世界,我可能会滥用资源丰富的路由。

默认的资源路由为我经常使用的URL提供了一些非常方便的帮助方法。我的问题是我有控制器,我将路由指定为资源丰富,只是为了利用这些辅助方法。我有一些基本的网站导航,没有资源业务。

resource :home do
  member do
    get 'main'
    get 'about'
    get 'login'
    get 'help'
  end
end

有没有更好的方法来做我一直在做的事情?任何不需要我每次有新的控制器操作时手动添加路由条目的东西吗?

为了澄清,我想为控制器指定路由,而不必显式添加任何新操作,但我也希望它自动生成帮助方法。到目前为止,我必须为我想要的每个动作明确添加路由。我可以通过这样做(以非智能的方式)获得类似的东西,

match 'home/about' => 'home#about'

但我不想写出那些不符合惯例的路线。

2 个答案:

答案 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仅在服务器启动时处理,因此您必须在添加新操作后重新启动服务器。