我的任务是在运行时创建不同 url 的映射。
在应用程序中,我有一个 GUI 界面,它显示来自 routes.rb 文件的路由列表。
用户可以将该 url 更改为界面中的某个不同名称,
例如。(abc/mno) --user 可以将它们更改为 --(hello)
所以如果用户在浏览器请求中键入 /hello 被重定向到 /abc/mno
我必须将这些映射的路由存储在数据库中。
如何在数据库中创建新记录时将动态映射路由添加到已定义的路由(routes.rb)
如何在加载 routes.rb 文件时从数据库添加路由。
我无法弄清楚如何扩展默认路由器,以便它可以包含来自数据库的路由..
问问题
2513 次
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
我没有为您提供完整的解决方案,但您可以从两种方法开始:
- 使用自定义 URL 约束:动态 URL -> Rails 中路由的控制器映射
- 使用 Rack 中间件:基于数据库的动态 Rails 路由
于 2013-05-15T08:58:03.650 回答