【问题标题】:Rails routes: same controller different routesRails 路线:相同的控制器不同的路线
【发布时间】:2013-08-28 11:55:41
【问题描述】:

在我们的应用程序中,我们有一个tag 模型,例如red yellow big small 等,在多个类别中,例如colorsize(标签模型确实有一个字段@987654328 @)。现在,而不是

/tags/big
/tags/small
/tags/red
/tags/yellow
/tags

我们想要这样的路线

/size/big
/size/small
/color/red
/color/yellow
/size
/color
...

此外,url 助手也应该工作,即tag_path 应该产生正确的 url 如何在 routes.rb 文件中执行此操作?谢谢!!

编辑:

  1. 也需要让索引页面/url_helper 工作
  2. will_paginate 使用 tag_path 生成带有页码的链接。需要重载tag_path?

【问题讨论】:

  • 您可以通过设置路径 resources :tags, only: [:show], path: 'size' 来更改名称,并将其包裹在一个约束中以根据内容显示 /size 或 /color
  • 你能举个例子吗?这将如何使 url 帮助程序也起作用?

标签: ruby-on-rails dynamic tags routes


【解决方案1】:

您可以使用带约束的路由。定义一个执行自定义条件匹配的类。您可以使用match 搜索API 以查看详细信息。

我假设您的标签有两列名为“类别”和“名称”。

路由.rb

match ':category/:name' => 'tags#show', via: 'get', constraints: TagRouteWhiteList.new, as: 'tag'

app/models/tag_route_white_list.rb

class TagRouteWhiteList
  def matches(request)
    Tag.distinct('category').include?(request.params[:category]) && Tag.distinct('name').include?(request.params[:name])
  end
end

在你看来,你可以使用tag_path(category: @tag.category, name: @tag.name)

【讨论】:

  • 谢谢。这很鼓舞人心。我选择使用正则表达式作为约束。不过还有两个问题:1. 有什么方法可以重新加载 tag_path?我使用 will_paginate 无法生成带有类别集的 tag_path。 2、/size/color等索引页呢?我只能让其中一个工作。欣赏!
  • 您可以编辑您的问题并添加一些示例吗?我认为您可以添加另一个匹配以支持 /size/color
  • 原来是其他一些冲突。感谢您的帮助。我会接受你的回答。
猜你喜欢
  • 2011-08-22
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
相关资源
最近更新 更多