ruby-on-rails - 动态 CMS 类似于 ruby​​ on rails 中的路由

标签 ruby-on-rails

我想创建一个类似 CMS 的网站,用户从一些通用页面开始,即

  • 首页
  • 关于
  • 联系方式

  • 并且可以从那里动态添加子页面,例如
  • 主页
  • 文章
  • 第1条
  • 某物
  • 其他
  • 文章2
  • 关于
  • 联系方式

  • 为了实现这一点,我计划使用某种自我参照关联,例如
    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/

    相关文章:

    ruby-on-rails - 显示 View 中的特色项目

    javascript - 如何使用 Ruby On Rails 5 播放声音

    ruby-on-rails - 如何将 Aptana 设置为我的默认 BUNDLER_EDITOR?

    ruby-on-rails - 如何在 rake 多任务中传递不同的参数

    ruby-on-rails - Ruby on Rails 的永久链接(动态路由)

    ruby-on-rails - ActiveRecord::StatementInvalid: 找不到表 'tablename'

    css - Heroku 不提供背景图片,localhost 提供吗?

    ruby-on-rails - 如何在转换后的字符串不充满反斜杠的情况下将哈希转换为 JSON

    ruby-on-rails - 将 Devise current_user 分配给评论

    ruby-on-rails - "\x90"从 ASCII-8BIT 到 UTF-8 错误轨