3

我的任务是在运行时创建不同 url 的映射。
在应用程序中,我有一个 GUI 界面,它显示来自 routes.rb 文件的路由列表。
用户可以将该 url 更改为界面中的某个不同名称,
例如。(abc/mno) --user 可以将它们更改为 --(hello)
所以如果用户在浏览器请求中键入 /hello 被重定向到 /abc/mno
我必须将这些映射的路由存储在数据库中。
如何在数据库中创建新记录时将动态映射路由添加到已定义的路由(routes.rb)
如何在加载 routes.rb 文件时从数据库添加路由。
我无法弄清楚如何扩展默认路由器,以便它可以包含来自数据库的路由..

4

2 回答 2

1

如果不想使用机架中间件,可以使用约束。希望您的动态路由范围仅限于某些内容,例如“/abc/ anything-after-here-can-be-dynamic ”,而不是直接从根...

因此,假设您想要基于用户名字的动态路由,那么您将执行以下操作:

#config/routes.rb
match '/abc/:route' => "abc#dynamicroute", :contraints => DynamicRouteConstraint.new

#lib/dynamic_route_constraint.rb
class DynamicRouteConstraint < Struct.new
  def matches?(request)
    User.find_by_first_name(request.params[:route]).present?
  end
end

#app/controllers/abc_controller.rb
class AbcController < ApplicationController
  def dynamicroute
    @user = User.find_by_first_name(params[:route])
    #render or redirect, however you wish
  end
end
于 2013-05-21T15:51:19.507 回答
1

我没有为您提供完整的解决方案,但您可以从两种方法开始:

于 2013-05-15T08:58:03.650 回答