ruby-on-rails – 动态URL – > Rails中路由的控制器映射

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 动态URL – > Rails中路由的控制器映射前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望能够根据我的数据库中的信息动态地将URL映射到控制器.

我正在寻找功能上等同于这一点的功能(假设View模型):

map.route '/:view_name',:controller => lambda { View.find_by_name(params[:view_name]).controller }

其他人建议dynamically rebuilding the routes,但这对我来说不起作用,因为可能有数千个视图映射到同一个控制器

解决方法

这个问题很旧,但我觉得很有趣.可以使用路由器的路由到Rack端点的功能,在Rails 3中创建一个全面的解决方案.

创建以下机架类:

class MyRouter
      def call(env)
        # Matched from routes,you can access all matched parameters
        view_name= env['action_dispatch.request.path_parameters'][:view_name]

        # Compute these the way you like,possibly using view_name
        controller= 'post' 
        my_action= 'show'

        controller_class= (controller + '_controller').camelize.constantize
        controller_class.action(my_action.to_sym).call(env)
      end
    end

路线

match '/:view_name',:to => MyRouter.new,:via => :get

提示http://guides.rubyonrails.org/routing.html#routing-to-rack-applications开始说:“对于好奇,”#索引“实际上扩展到PostsController.action(:index),它返回一个有效的Rack应用程序.

在Rails 3.2.13中测试的一个变体.

猜你在找的Ruby相关文章