我想创建一个类似 CMS 的网站,用户从一些通用页面开始,即
- homepage
- about
- contact
- etc
并从那里可以动态添加子页面,例如
- homepage
- about
- contact
- etc
为了实现这一目标,我计划使用某种自我参照关联,例如
class Page < ActiveRecord::Base
belongs_to :parent, :class_name => 'Page'
has_many :children, :class_name => 'Page'
end
我正在努力解决的一件事是路线生成。因为可以动态添加页面,所以我需要动态生成这些页面的路由,并且无法知道页面可以嵌套多少层
因此,如果我从主页开始:
/
然后开始添加页面,即
/文章/article1/某事/某事-其他/另一件事
如何使用 Rails 路由模型来实现类似的功能?
一旦你有办法为你的网站生成 URL 字符串Page
记录(我将把这部分留给你),你可以将每一页映射到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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)