加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 3:让所有路径更易于阅读和修改

发布时间:2020-12-17 03:20:51 所属栏目:百科 来源:网络整理
导读:我正试图在Rails 3中编写一个包罗万象的路线,但我想在其中保留一些术语.我特别关注这篇文章中提到的例子,在David Burrows的回答中: Dynamic routes with Rails 3 我使用的语法如下: match '*path' = 'router#routing',:constraints = lambda{|req| (req.en
我正试图在Rails 3中编写一个包罗万象的路线,但我想在其中保留一些术语.我特别关注这篇文章中提到的例子,在David Burrows的回答中: Dynamic routes with Rails 3

我使用的语法如下:

match '*path' => 'router#routing',:constraints => lambda{|req|  (req.env["REQUEST_PATH"] =~ /(users|my-stuff)/).nil? }

现在,该语法工作得很好 – 如果用户在路径中访问带有“user”或“my-stuff”的页面,它将通过catch-all进入特定位置.如果用户转到任何其他URL,它将转到我的路由逻辑.

我的问题更多的是关于可读性 – 有没有办法可以将路线与正则表达式之外的其他东西相匹配?有没有办法提供一系列匹配的术语?另外,有没有办法匹配路线的特定路段,而不是整个路段?

显然Rails有内置路由,但是这个项目要求对于某些路由,控制器不在URL中.因此,全面.

谢谢你的帮助

这是根据以下答案更新的路线文件:

class RouteConstraint
  RESERVED_ROUTES = ['users','my-stuff']

  def matches?(request)
    !RESERVED_ROUTES.map {|r| request.path.include?(r)}.empty?
  end
end

App::Application.routes.draw do
  resources :categories
  resources :sites

  match '*path' => 'router#routing',:constraints => RouteConstraint.new

  devise_for :users,:path_names =>{ :sign_in => 'login',:sign_out => 'logout',:registration => 'register' }
  root :to => "router#routing"
end

解决方法

如果要在尝试多个路径时想要更清洁的东西,可以使用类来指定约束:

class MyConstraint
  BYPASSED_ROUTES = ['users','my-stuff']

  def matches?(request)
    BYPASSED_ROUTES.map {|r| request.path.include?(r)} .empty?
  end
end

TwitterClone::Application.routes.draw do
  match "*path" => "router#routing",:constraints => MyConstraint.new
end

此示例改编自rails routing guide.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读