我想创建一个类似 CMS 的网站,用户从一些通用页面开始,即
并且可以从那里动态添加子页面,例如
为了实现这一点,我计划使用某种自我参照关联,例如
class Page < ActiveRecord::Base
belongs_to :parent, :class_name => 'Page'
has_many :children, :class_name => 'Page'
end
我正在努力解决的一件事是路线生成。因为可以动态添加页面,所以我需要为这些页面动态生成路由,并且无法知道页面可以嵌套多少层
因此,如果我从主页开始:
/
然后开始添加页面,即
/articles/article1/something/something-else/another-thing
如何使用 rails 路由模型实现类似的功能?
最佳答案
一旦你有办法为你的 Page
生成 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
关于ruby-on-rails - 动态 CMS 类似于 ruby on rails 中的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/776268/