gpt4 book ai didi

ruby-on-rails - 如何检测 Rails 3 路由中的整数?

转载 作者:行者123 更新时间:2023-12-04 05:48:22 25 4
gpt4 key购买 nike

我想在 rotues.rb 中做一点一点额外的逻辑,这可能不属于那里,但它对我来说似乎最有意义。

我有两条相互冲突的路线。要原始:

match '/videos/:browseby' => 'videos#browse', :as => "browse_by"

其中:browseby 正在寻找一个字符串,例如“Tags”,以按标签浏览视频。

但是,(而且很可能看到了这一点)我也有我的基本节目资源(同样是原始形式):

match '/videos/:id' => 'videos#show', :as => "video"

其中 :id 正在寻找视频 ID 的整数。

有没有办法添加一点逻辑,比如...

match '/videos/:id' => 'videos#show', :as => "video", :format(:id) => :integer

(这是我假设的 rails 语法,以帮助显示我正在寻找的内容。)

我知道我可以在 Controller 级别处理它,但在路由级别处理它对我来说更有意义。

最佳答案

您可以尝试使用 :constraints 和正则表达式:

match '/videos/:id' => 'videos#show', :as => "video", :constraints => { :id => /\d/ }
match '/videos/:browseby' => 'videos#browse', :as => "browse_by"

您还需要确保较宽松的 :browseby 版本出现在 :id 版本之后。注意 regex constraints are implicitly anchored at the beginning所以只要您的 :browseby 值不是以数字开头,它就可以工作。

如果你有以数字开头的标签,那么你可以 use an object for the constraint然后你可以在你的正则表达式中包含 anchor :

class VideoIdsOnly
def matches?(request)
request.path =~ %r{\A/videos/\d+\z}
end
end

match '/videos/:id' => 'video#show', :as => "video", :constraints => VideoIdsOnly.new
match '/videos/:browseby' => 'videos#browse', :as => "browse_by"

关于ruby-on-rails - 如何检测 Rails 3 路由中的整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8904029/

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