新手问题 那些不常更改的内容,你们怎么设置的?

chairy11 · 2015年04月27日 · 最后由 chairy11 回复于 2015年04月28日 · 2261 次阅读

比如做个公司门户网站,有些页面很静态,比如什么「关于我们」,关于公司的简介啊、地址啊、电话啊,这些东西其实不怎么变化。 但为防万一,又得有个地方让它可以编辑。

不知道是不是如果用mongodb做数据库,这种一次性的东西用键值对存储很方便? 但我用了mysql。 所以我目前的方案是存入一个setting.yml,然后用CONFIG[:key]来读取。 实现之后,想了想,应该从web界面配置吧? 那我应该自己弄个方法,先从yml读取到form上,编辑完,put到server,然后再把数据写入yml?

然后我发现了一个GEM, configurable_engine,貌似就是能从界面设置yml的。 正准备尝试。搜了搜,人气不是很高。 大家都怎么处理这些事情的?用过这个GEM吗? 有什么好推荐吗?

另外,很多人推荐Figarodotenv, 好像人气更旺一点。但它们没有打包界面实现功能?

还看到RailsCasts: #336 Copycopter, 但这个看起来好诡异,要单开一个server,没看懂……但感觉也不方便……

共收到 21 条回复

= = 你建一个pages的表存起来就行了,然后加上缓存。存成文件什么的更复杂。

我也有类似问题,比如一个类似分类的问题。

如果放 数据库,每次读取出来都要访问数据库,如果yml 写死了,更新就要改源代码。

我的想法是存在数据库,然后一个 action 写到缓存,不知道有没有 best practice

有个settings gem https://github.com/ledermann/rails-settings 拿走 不谢哦

class DataConfig < ActiveRecord::Base

  SMS = %w{ 容联 云片 }

  store :details, accessors: [:sms, :about, :phone, :desc], coder: JSON

  scope :current_config, -> { first }

end

#3楼 @kewin 没懂……原理是什么?

create_table :settings do |t|
      t.string     :var,    :null => false
      t.text       :value
      t.references :target, :null => false, :polymorphic => true
      t.timestamps :null => true
end
add_index :settings, [ :target_type, :target_id, :var ], :unique => true

看它里面的表,是指,建一个表,这个表的四个字段,一个是key,一个是value, 这两个合起来是setting的键值对,然后多态映射,记下它的目标的class和id?

那倒跟我前面的思路有一点点像。我一开始是准备建个表,

create_table :elements do |t|
      t.string :name
      t.text :content

      t.timestamps null: false
 end

然后给它一个唯一的名称,比如「关于我们」页面上的公司地址对应存入的是:name: "about_us_address" content: "北京市长安街一号"。 然后通过Element.where(name: 'about_us_address').take来找。 可是后来想想,好像效率很低而且好傻哦…… 然后又重新找方案……

其实我的重点是要通过web界面能设置的,可能有三种,一种是string,一种是txt,最好还能设置图片。

#4楼 @42thcoder 哭……看不懂……

#6楼 @chairy11

基本思路是新建一张表, 来存储配置. 借助store, 在字段中存储 JSON 格式的数据, accessors 定义了可能存在的 key. accessors 中定义的 key 可以随意删减, 同时支持在前端 form 直接读写.

按我上面给出的例子, 你可以 DataConfig.current_config.update!(about: '简介', phone: 110), 也可以 DataConfig.current_config.about

具体使用, 你看 API 吧.

給別人做的那麼還是新建page數據表或者直接post數據表, post_typepage. 自己做主要看前端,那就沒所謂了.我做過的通常都是這樣乾的,至於寫入文件,這事我也幹過.比如寫進yaml.

挂个 CMS 进去..

直接html, 要改的时候收维护费。

静态页面做一个 Page 表 内容少的设置项用 https://github.com/huacnlee/rails-settings-cached

例如

Setting.admin_password = 'supersecret'
Setting.date_format    = '%m %d, %Y'
Setting.cocktails      = ['Martini', 'Screwdriver', 'White Russian']
Setting.foo            = 123
Setting.credentials    = { :username => 'tom', :password => 'secret' }

#12楼 @huacnlee 静态页面做一个 Page 表是什么意思呢?

之前我尝试的configurable_engine, 生成的value字段用的是string,我要存html不够用。 看你的gem不太看懂,但看你的value字段倒是text,但我想想,好像我主要是针对静态页面的修改,没什么用到多态的地方……

create_table :settings do |t|
     t.string  :var,        null: false
     t.text    :value,      null: true
     t.integer :thing_id,   null: true
     t.string  :thing_type, null: true, limit: 30
     t.timestamps
   end

我在想,要不要按我原来的思路,来一个element model,统统管理了,写进mysql,就不用yml了。

create_table :elements do |t|
      t.string :name
      t.text :content

      t.timestamps null: false
 end

因为我还有很多html项,在里面也可以编辑。 但缓存是什么个思路呢?

#13楼 @chairy11 第一个问题,看 Ruby China 的 Page 功能 第二个问题,你一定没看我贴的连接,那就是你想要的

#14楼 @huacnlee 链接我看了呀,现在脑子有点乱嘛……我知道你写的这个就叫「rails-settings-cached」,肯定是缓存很棒罗,可是我看不懂嘛,所以想着有什么深入浅出的思路嘛…… 我意思是,我本来想自己有针对性的写一个,然后就不用这些gem了……

#14楼 @huacnlee 555,头疼……看ruby-china的page功能,好像它直接用mongodb存的body_html. 但我做的这种小网站吧,每个页面的样式都不一样,比如「关于我们」「联系我们」「首页」,我想让他们能改的就是其中一些文字。别的也不轻易让他们改,免得把我设计破坏了……

我再好好学习一下哦……

#16楼 @chairy11 可以使用这个gem 来做静态页面 high_voltage

#17楼 @foxzool 没看到有什么特别呀……它是把整个页面的html存进数据库还是咋的? 我页面已经完全写好了,只是想弄个方案,让人们能改改其中的文字。 好像CMS们都是所见即所得地改,但对我来说好像太高级了点…… 我现在想的是在后台admin下面来个页面,集中修改这些不常修改的地方……

不要光说不练,你试试啊

#18楼 @chairy11 就是一个单纯的静态页面管理gem, 一个页面一个独立的view, 放放公司简介什么的足够了。

#19楼 @huacnlee 哦……人家水平不够嘛……

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册