gpt4 book ai didi

ruby-on-rails - Rails 路由顶层路由和信息架构

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

我正在寻找一些关于使用不是 Rails 包罗万象的顶级路由的哲学和技术实践的反馈。

示例:

# routes.rb
get '/cities' => 'cities#index'
get '/:city_id' => 'cities#show', as: :city, city_id:/([a-z\-\d]+)/

我有大约 3 万个城市:city_id 应该仅限于匹配诸如“/los-angeles”之类的内容,而不是“/somewrongthing.jpg”。由于这是最后一条路线,因此它变得有点包罗万象。如果找不到城市,我目前正在渲染 404,但这意味着每次丢失的链接通过时都会命中数据库。我通过约束来限制它,但它不是我希望的优雅解决方案。

除了把它放在像/city/:city_id这样的东西下面还有什么解决方案吗?

最佳答案

我认为您应该寻找一些替代方法来在路线本身中处理这个问题。 30,000 条路由只会将 RAM 问题换成 DB 问题。
也许您有一些普通的 ruby​​ 对象(文件支持,也许?)可以充当城市缓存,您可以在每个到达您的城市路线的请求上查询它。

像这样的东西,也许?

# in config/routes.rb
get '/:city' => 'cities#show', constraints: CityConstraint.new

# in lib/city_constraint.rb
class CityConstraint
def matches?(request)
city_valid?(request.params[:city])
end

private

def city_valid?(city)
# I dunno.. Redis, look it up in a text file, hash, etc.
# ..look it up in activerecord and cache it at startup?
# or whatever...
end
end

关于ruby-on-rails - Rails 路由顶层路由和信息架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11749072/

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