gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:46:41 27 4
gpt4 key购买 nike

我正在使用 Rails 2.3 构建一个包含各种模块(博客、日历等)的 CMS。每个模块都由不同的 Controller 处理,并且工作得很好。

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

目前我正在使用一个特定的“根” Controller 来检查数据库并重定向到正确的 Controller 。但是,我希望 URL 不被更改,这意味着我想从同一个请求中调用正确的 Controller 。

我尝试使用 Rails Metal 获取此信息并手动调用我想要的 Controller ,但我想我可能正在重新发明轮子(确定选择 Controller 的请求路径、管理 session 等)。

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

最佳答案

这个问题可以通过一些 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有一些问题,因为并非所有的网络服务器都正确地传递了这个。 Rails 中的全部实现细节参见 http://api.rubyonrails.org/classes/ActionController/Request.html#M000720 (点击“查看源代码”)

关于ruby-on-rails - 基于数据库的动态 Rails 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1518799/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com