加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 基于数据库的动态Rails路由

发布时间:2020-12-17 03:25:54 所属栏目:百科 来源:网络整理
导读:我正在使用Rails 2.3构建一个包含各种模块(博客,日历等)的CMS.每个模块由不同的控制器处理,工作正常. 我唯一的问题是根URL.根据用户选择的配置,此默认URL应显示不同的模块,即不同的控制器,但我必须确定正确控制器的唯一方法是检查数据库是否显示“默认”模块
我正在使用Rails 2.3构建一个包含各种模块(博客,日历等)的CMS.每个模块由不同的控制器处理,工作正常.

我唯一的问题是根URL.根据用户选择的配置,此默认URL应显示不同的模块,即不同的控制器,但我必须确定正确控制器的唯一方法是检查数据库是否显示“默认”模块.

目前我正在使用一个特定的“根”控制器来检查数据库并重定向到正确的控制器.但是我更喜欢不改变URL,这意味着我想从同一个请求中调用正确的控制器.

我已经尝试使用Rails Metal获取此信息并手动调用我想要的控制器,但我想我可能正在重新发明轮子(确定选择控制器的请求路径,管理会话等).

任何的想法?非常感谢提前!

解决方法

使用某些Rack中间件可以解决此问题:

lib / root_rewriter.rb中的这段代码:

module DefV
  class RootRewriter
    def initialize(app)
      @app = app
    end

    def call(env)
      if env['REQUEST_URI'] == '/' # Root is requested!
        env['REQUEST_URI'] = Page.find_by_root(true).uri # for example /blog/
      end

      @app.call(env)
    end
  end
end

然后在底部的config / environment.rb中

require 'root_rewriter'
ActionController::Dispatcher.middleware.insert_after ActiveRecord::QueryCache,DefV::RootRewriter

此中间件将检查所请求的页面(REQUEST_URI)是否为’/’,然后查找实际路径(实现到此由您决定;-)).您可能会在某处缓存此信息(Cache.fetch(‘root_path’){Page.find …})

检查REQUEST_URI存在一些问题,因为并非所有的Web服务器都正确地传递了这个问题.有关Rails中的整个实现细节,请参阅http://api.rubyonrails.org/classes/ActionController/Request.html#M000720(单击“查看源代码”)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读