我想创建一个像网站一样的CMS,用户可以从一些通用页面开始,即
>主页
>关于
>联系
>等
>主页
>文章
>第1条
>某事
>其他东西
>第2条
>关于
>联系
>等
为了达到这个目的,我计划使用某种自我指涉关联
class Page < ActiveRecord::Base belongs_to :parent,:class_name => 'Page' has_many :children,:class_name => 'Page' end
我正在努力的一件事是路线生成.因为页面可以动态添加,我需要为这些页面动态生成路由,并且无法知道页面可以嵌套多少层次
所以,如果我从主页开始:
/
/用品/第一条/某事/东西,否则/另一个,事情
如何使用rails路由模型实现类似的功能?
@R_502_323@
一旦你有办法为你的页面记录生成URL字符串(我将把那部分留给你),你可以只映射config / routes.rb中的每一页:
Page.all.each do |page| map.connect page.url,:controller => 'pages',:action => 'show',:id => page end
并让观察者挂钩页面模型,以便在发生变化时重新加载路由:
class PageObserver < ActiveRecord::Observer def reload_routes(page) ActionController::Routing::Routes.reload! end alias_method :after_save,:reload_routes alias_method :after_destroy,:reload_routes end
不要忘记编辑config / environment.rb来加载观察者:
# Activate observers that should always be running config.active_record.observers = :page_observer