本事例只为说明如何修改yml文件内容。git
1、需求是怎么样修改yml文件内容?github
配置文件名称为webinfo.yml,内容为:web
development:json
webinfo:网站
webtitle: 个人网站名称ui
keyword: 网站的关键字spa
production:对象
webinfo:get
webtitle: 上线后的网站名称hash
keyword:上线后的网站的关键字
2、我是怎么作的?
个人思想是:首先取到配置文件的全部内容,把内容转换为json对象或hash对象,而后把某个字段的值修改成本身的内容,再把整个json或hash转换成yml写回到yml配置文件。
一、获取内容并转化为json或hash
获取文件内容的方式有不少,这里介绍两种方式:使用YAML.load(File.open(filepath))或YAML.load_file(filepath)和使用Gem包settingslogic(settingslogic的使用请参考:https://github.com/binarylogic/settingslogic)
这里我使用settingslogic这种方式:新建一个类(好比在models文件夹下),类名:Webinfo,内容为
class Webinfo< Settingslogic
PATH = "#{Rails.root}/config/webinfo.yml"
source PATH
namespace Rails.env
end
在controller里的使用Webinfo.webinfo或Webinfo["webinfo"]来获取到内容,代码以下:
def get_webinfo
info = Webinfo["webinfo"]
puts info.inspect
title = info["webtitle"]
puts title
end
二、修改某个字段的值
在Webinfo类新增保存方法:
require 'yaml/store'
class Webinfo< Settingslogic
PATH = "#{Rails.root}/config/webinfo.yml"
source PATH
namespace Rails.env
def self.save(content)
store = YAML::Store.new PATH
store.transaction do
store[Rails.env]["webinfo"] = content.to_hash
end
end
end
在controller里的新建修改的方法,代码以下:
def update_webinfo
info = Webinfo["webinfo"] # 获取
info["webtitle"] = "新的网站名称"
Webinfo.save(info) # 保存
end
这样就把这个属性的内容改掉了。
若是有更好的方法,还望你们赐教。