首先澄清一下,我们不是在寻找CMS。我们有一个已经完成并上线的应用程序。
我想在后端创建一个区域,供登录管理员管理出现在网站前端的字段。
我想创建一个表:CMS_Fields。每个CMS_Field可以有:name
、:content
和:timestamp
字段。然后,我将通过在视图中按其:name
调用它来显示我想要的特定字段。为了使该特定字段在后端可编辑,我将创建一个禁用的输入,并在禁用的输入中使用该字段的:name
,并让用户自己在保存之前输入:content。这也意味着我必须使用正确的默认值初始化所有字段:name
.这样做有意义吗?
为了在不属于CMSFieldController的不同视图中使用这些字段,我将使用一个辅助变量。这是否打破了惯例,这有多好?
这似乎是正确的方法,还是我应该考虑一种不同的做事方式,甚至是宝石?
看看管理 https://github.com/thoughtbot/administrate
我已经用过几次了,它非常棒而且灵活。 另外,ActiveAdmin还不错 https://github.com/activeadmin/activeadmin
我首先为所有未来的 cms 托管字段创建一个模型并使用默认值进行迁移来实现这一点。这些字段有一个静态:name
变量,由开发人员(我(确定。然后我在application_helper的观点中直呼他们的名字。就是这样,简单的CMS功能。现在,每当我添加一个字段时,我都可以在任何页面上将其拍打,并在我现有的管理面板称为"CMS"的页面上管理所有内容。
create_site_field_migration.rb:
class CreateSiteFields < ActiveRecord::Migration[5.0]
def change
create_table :site_fields do |t|
t.string :name, null: false
t.text :content, null: false
t.timestamps
end
# readonly names and default values of content managed fields
SiteField.create(name: "home_header_text", content: "Lorem ipsum sit dolor le amet.")
SiteField.create(name: "home_body_text", content: "Requisitor mon lormen doit namet.")
end
end
我让管理员能够编辑管理面板中已经单独保护的字段。
为了公开前端的字段,我使用application_helper
来公开一个变量:
application_helper.rb:
def site_field(name)
SiteField.find_by(name: name).content.html_safe
end
然后,我将在视图中需要的任何位置引用静态命名的字段:
首页.html.erb:
<%= site_field(:home_body_text) %>