如何在rails3中创建动态路由和帮助器

时间:2013-05-15 08:37:48

标签: ruby-on-rails ruby-on-rails-3.1 routes

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果您不想使用机架中间件,则可以使用约束。希望你的动态路由可以限定为什么,比如“/ abc / any-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