动态 CMS,如 ruby​​ on Rails 中的路线

2023-11-26

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

  • homepage
  • about
  • contact
  • etc

并从那里可以动态添加子页面,例如

  • homepage
    • articles
      • article1
        • something
          • 其他的东西
      • article2
  • 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(使用前将#替换为@)

动态 CMS,如 ruby​​ on Rails 中的路线 的相关文章

随机推荐

  • Laravel 迁移不会添加外键

    我是迁移新手 并尝试创建 2 个表 其中一个表有外键 另一个表引用另一个表中的 id 但我遇到了添加键错误的一般失败 我有什么遗漏的吗 error PDOException SQLSTATE HY000 General error 1215
  • 如何通过安装脚本向 Magento 添加类别?

    我实际上可以通过设置脚本添加一个类别 但由于某种原因 某些字段没有正确设置 这是我的代码 this gt startSetup Mage register isSecureArea 1 category Mage getModel cata
  • CodeSign 错误:SDK“iOS 6.0”中的产品类型“应用程序”需要代码签名

    我下载了一个名为 Plot Gallery ios 的项目 主要用于绘制图形 这是从 core plot 下载的 主要目标项目是 Plot Gallery IOS 它还有一个名为 CorePlot CocoaTouch xcodeProj
  • 如何使用 python2 运行时和 antlr4 打印解析树

    我正在尝试使用antlr4 版本 4 4和python2运行时 语法来自antlr4书 第6页 文件 Hello g4 grammar Hello r hello ID ID a z WS t r n gt skip 我用命令生成词法分析器
  • 如何显示Xbutton(清除按钮)在uisearchbar中始终可见[重复]

    这个问题在这里已经有答案了 在我的应用程序中 我添加了一个UI搜索栏 我的目的是启用 UI 搜索栏 X 按钮 清除按钮 UI文本字段 始终可见 我尝试使用下面的代码来尝试使 X 按钮 始终可见 然而 它不起作用 如果我设置tf clearB
  • Android:片段 backStack

    我试图在调用方法时加载新片段 此方法创建一个新片段并 替换 另一个片段 private void showTestFragment Fragment oldFragment boolean addBackStack BaseAdapter
  • 基于杰克逊另一个字段值的条件字段要求?

    考虑一种包含一个字符串和两个数组的 JSON 表示形式 例如 type A ListA ListB 3 4 5 在上述情况下 type是必填字段 但是ListA and ListB are 有条件的根据值进行反序列化所需的type 换句话说
  • 如何更改绘图颜色饱和度

    我已经安装了最新版本的seaborn 0 11 1 当我使用自定义颜色绘制历史记录时 它显示的颜色与我预期的不同 请参阅 sns palplot 的颜色 对于某些 api 它有一个饱和参数 但对于 displot 则没有 dat plots
  • 升级到 Google Play 服务:9.0.0 错误无法解决:com.google.android.gms:play-services-measurement:9.0.0

    我升级了我的 build gradle 文件 compile com google android gms play services 8 4 0 to compile com google android gms play service
  • MySql 带名称的主键约束

    数据定义语句 CREATE TABLE Persons P Id int NOT NULL LastName varchar 255 NOT NULL FirstName varchar 255 Address varchar 255 Ci
  • 从 GHC 分析器中理解

    我试图从 GHC 分析器中理解 有一个相当简单的应用程序 它使用werq and lens aeson库 在学习 GHC 分析的同时 我决定尝试一下它 使用不同的选项 time tool RTS p RTS and RTS p h 我获得了
  • 在 Windows 8.1 GridView 中不显示 Visibility=Collapsed 的项目

    我有一个 Windows 8 1 应用程序GridView绑定到自定义 可排序 去重 可观察集合 在此集合中 我进行了一些严格的过滤 并为每个项目设置了 IsHidden 标志 在项目的数据模板中 如果 IsHidden 标志设置为 tru
  • 如何修复“sudo:不存在 tty 并且未指定 Askpass 程序”错误?

    我正在尝试使用 makefile 编译一些源代码 在 makefile 中有一堆需要运行的命令sudo 当我从终端编译源代码时 一切都很顺利 并且第一次 make 会暂停sudo运行命令等待密码 输入密码后 make 将继续并完成 但我希望
  • Phalcon 中的交叉控制器变量

    为了保持代码干燥 我希望能够定义 跨控制器 变量 典型的例子是我想访问我的引导程序中加载的一些配置项 实现这一目标的最佳实践方法是什么 Tim 您可以随时使用 Di 容器 一旦你在 Di 中注册了一个组件 它就可以通过魔术方法在控制器中使用
  • 如何使用ffmpeg淡入淡出两个图像

    我有两个图像 我想在它们之间创建一个简单的淡入淡出过渡 我还希望最终输出是图像序列而不是视频 因此 如果淡入淡出过渡的长度为 10 帧 我希望输出为 10 个图像的序列 我怎样才能用 ffmpeg 实现这个目标 See the blend视
  • macOS php71 通过brew 变得[电子邮件受保护]

    一天前 我用brew命令安装了正常的php71brew install php71 我试图安装 gmp 扩展 例如brew install php71 gmp但它不起作用 所以我使用了谷歌搜索中的某种代码 并使我的 php71 成为 电子邮
  • 在运行时修改类属性

    我不确定我是否见过 在运行时更改属性的参数 我的情况非常相似 但我试图在运行时更改类的属性 Category Change me public class Classic public string Name get set 其中一个答案是
  • 如何在不抗锯齿的情况下拉伸图像

    所以我最近遇到了这个 http www nicalis com 我很好奇 有没有办法用较小的图像来做这种事情 我的意思是 它是像素艺术 而不是使用每个像素大小四倍的图像 我们不能用代码拉伸它们吗 所以我开始努力实现它 我尝试了 CSS Ja
  • Angular 6 HttpClient 返回类的实例

    在引入 Angular 的新 HttpClient 之前 我们可以使用以下方法验证从 http api 调用返回的对象instanceof关键词 他们不再可以使用 HttpClient 模块 我正在尝试一些简单的方法 但类型检查每次都返回
  • 动态 CMS,如 ruby​​ on Rails 中的路线

    我想创建一个类似 CMS 的网站 用户从一些通用页面开始 即 homepage about contact etc 并从那里可以动态添加子页面 例如 homepage articles article1 something 其他的东西 ar