gpt4 book ai didi

ruby-on-rails - rails 3 : making a catch-all route easier to read and amend

转载 作者:行者123 更新时间:2023-12-04 03:52:34 24 4
gpt4 key购买 nike

我正在尝试在 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”的页面,它就会跳过所有内容并转到特定位置。如果用户转到任何其他 URL,它将转到我的路由逻辑。

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

显然 Rails 有内置路由,但是这个项目有一个要求,对于某些路由, Controller 不能出现在 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 .

关于ruby-on-rails - rails 3 : making a catch-all route easier to read and amend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com