gpt4 book ai didi

ruby-on-rails - Rails 3 路由 : I have "/products?cat=1", 我想要 "/art"

转载 作者:行者123 更新时间:2023-12-04 06:20:36 24 4
gpt4 key购买 nike

我对 Rails 相当陌生,发现自己对路由配置感到困惑。

在我的项目中,我有 2 个模型:产品和类别。产品属于_to 类别,类别has_many 产品。

Products Controller 有一个索引操作,它采用可选的 cat参数。当存在时,cat param 将产品列表过滤为该类别中的产品。很基本的东西。

我要的是mysite.com/art具有与 mysite.com/products?cat=1 相同的结果,其中“艺术”是类别 1 的 slug。我定义了其他几条足智多谋的路线,包括一条用于产品的路线:

resources :products do
collection do
get 'search_by_color'
end
end

我也想点 /products/some-product-slugproducts#show
我正在使用 Rails 3。如何进行此路由设置?

最佳答案

除非您的类别是静态的并且 slug 永远不会改变,否则您所要求的可能是不可取的。那是因为没有办法静态地分辨 /art 之间的区别。并且,比如说,/about , 或 /contact等。它也不是非常 RESTful,因此在某种程度上被 Rails 不赞成。

也就是说,如果你无论如何都想这样做,你应该写一个请求约束。这是响应 matches? 的任何对象并接受单个参数(匹配请求)。如果返回 true,则路由将匹配,并且将按照您指定的方式进行路由。例如,您可能会编写如下内容:

match '/:category_slug' => 'products#index',
:constraints => CategorySlugConstraint.new

class CategorySlugConstraint
def matches?(request)
Category.find_by_slug ...
end
end

关于ruby-on-rails - Rails 3 路由 : I have "/products?cat=1", 我想要 "/art",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6635291/

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