Gem rails-settings-cached 0.2.0 发布

huacnlee · 2012年02月09日 · 最后由 huacnlee 回复于 2013年11月20日 · 5140 次阅读

这个 Gem 是用来给 ActiveRecord 做设置项存储的,数据保存在数据库里面,读取将会有自动缓存。

https://github.com/huacnlee/rails-settings-cached

用法:

class Setting  < RailsSettings::CachedSettings  
end

$ rails c
ruby> Setting.foo = "bar"
ruby> exit
$ rails c
ruby> Setting.foo
bar

更多用法,参见 Github 上面的 README 文档。

好东西,之前都是用 redmine 中的 Setting 类似的。

正打算使用。

以后找一期介绍下你这个... lol....

这个不错

如果要在 form 里编辑某些选项呢?我能想到的是用 activemodel 封装,加验证,数据实际是从 setting 加载,最后保存到 setting

有个问题:在使用rails g settings foobar之后,生成的 Model,默认不是带缓存的:

class Foobar < RailsSettings::Settings
end

修正的话,也比较简单,修改一下 generator 里面的 model.rb 文件就好。

#6 楼 @daqing 看了好一会儿才明白...我了解了

#7 楼 @huacnlee 我正想弄个 patch,你要是修正了,我就不改了。

@huacnlee 提交了一个 pull request: https://github.com/huacnlee/rails-settings-cached/pull/7

项目中用到这个 gem,小小贡献一下。

#9 楼 @daqing 好了,我发布了 0.2.1

#10 楼 @huacnlee 为何不考虑把不同环境分开,测试不好写

昨天遇到一件特别奇怪的事情。 使用插件 rails-settings-cached 在管理界面 做了一个表单提交 配置。

class Admin::SettingsController < Admin::BaseController

  def config
    params[:setting].each do |k,v|
      Setting[k] = v
    end
    flash[:notice]='update setting success.'
    redirect_to :back
  end

end

params = {:setting => {:dollar_rate => "6.3684"}}

这个时候 params[:setting] 会死循环,挺奇怪的。 当我把 action 名称“config”换成别的名称 就正常了。难道 config 是关键字不能做 action?

@huacnlee 请教一个问题,刚刚使用了这个 gem。有一个小问题,我在测试里面修改了某个设置(比如 Setting.repo),发现在其他环境中 (development) 修改依然有效,是不是没有区分环境?有什么建议的做法来再测试中使用不同的配置?

@zlx_star

# config/config.yml
public:
  smtp_server: 'mail.agideo.com'
test:
  smtp_server: 'mail.agideo.com'
development:
  smtp_server: 'mail.agideo.com'
production:
  smtp_server: 'mail.agideo.com'
# config/initializers/init_setting.rb
APPCONFIG = YAML.load_file("config/config.yml")["public"].merge(YAML.load_file("config/config.yml")[Rails.env])

#14 楼 @zlx_star 这个是基于数据库的,数据库就已经有区分环境了

#16 楼 @huacnlee 我注意到这个是有 cache 的,cache 是不是不区分环境的?还是重启后自动失效?

#17 楼 @zlx_star Rails 的 cache 也是有区分环境的,除非你配置不对

#18 楼 @huacnlee 没有单独配置 cache_store,rails 4 默认的配置不可以吗?有没有推荐配置可以介绍一下。

@huacnlee 默认值可以限制在不同的 model 里面吗?在 config/initializers/default_settings.rb 的设置好像对所有 include RailsSettings::Extend 的 model 都是有效的。 比方说,用户有默认性别 gender,公司有默认规模 staff_count,这样@user.settings[:staff_count] 能得到值,总感觉怪怪的。 能不能像添加类似 ledermann / rails-settings 里面的设置,默认值是可以有 scope 的

class User < ActiveRecord::Base
  has_settings do |s|
    s.key :dashboard, :defaults => { :theme => 'blue', :view => 'monthly', :filter => false }
    s.key :calendar,  :defaults => { :scope => 'company'}
  end
end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号