我正在使用Rails 2.3構建包含各種模塊(博客,日曆等)的CMS。每個模塊由不同的控制器處理,並且工作得很好。基於數據庫的動態導軌路由
我唯一的問題是根URL。根據用戶選擇的配置,這個默認的URL應該顯示一個不同的模塊,即不同的控制器,但唯一的方法是確定正確的控制器是通過檢查數據庫來查看「默認」模塊的顯示內容。
目前,我正在使用特定的「根」控制器來檢查數據庫,並將重定向到到正確的控制器。不過,我寧願URL不要改變,這意味着我想從相同的請求調用正確的控制器。
我試過使用Rails Metal來獲取這些信息並手動調用我想要的控制器,但我想我可能會重新發明輪子(確定請求路徑來選擇控制器,管理會話等)。
有什麼想法?提前感謝!
這段代碼在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
這個中間件將檢查
是的,這個作品!這或多或少是我已經試圖做的,但直到現在還沒有成功。謝謝你! – 2009-10-20 09:14:35