【发布时间】:2008-09-24 20:00:52
【问题描述】:
我正在编写一个应用程序,允许管理员为页面、类别等添加别名,并且我想根据别名使用不同的控制器/操作(无需重定向,并且我发现render实际上并没有调用方法,我只是渲染模板)。我尝试了一条捕获所有路由的方法,但我并不热衷于引发和捕获每次都会抛出的 DoubleRender 异常。
我想出的解决方案是在服务器启动时动态生成路由,并在创建/更新/销毁别名时使用别名模型的回调来重新加载路由。 这是我的 routes.rb 中的代码:
Alias.find(:all).each do |alias_to_add|
map.connect alias_to_add.name,
:controller => alias_to_add.page_type.controller,
:action => alias_to_add.page_type.action,
:navigation_node_id => alias_to_add.navigation_node.id
end
我在 Alias 模型中使用如下回调:
after_save :rebuild_routes
after_destroy :rebuild_routes
def rebuild_routes
ActionController::Routing::Routes.reload!
end
这是否违反 Rails 最佳实践?有没有更好的解决方案?
【问题讨论】:
-
你能再澄清一点,也许发布一个你的别名应该做什么的例子(也许有点超出你的 routes.rb 文件)?不太明白
标签: ruby-on-rails ruby