Gem rails-settings-cached 通过 api 创建 setting 后,不能直接根据 Setting.var 获取到值

Sylor-huang · 2020年07月06日 · 最后由 Sylor-huang 回复于 2020年07月07日 · 1881 次阅读

Rails版本:6.0.2.2

Ruby版本:2.7.0p0

gem 'rails-settings-cached', '~> 2.2'

通过 fieldsetting.rb 里设置参数是可以通过 Setting.var 获取到正确的值:

# setting.rb
...
cache_prefix { "setting_cache" }
field :check_hour, default: 12, type: :integer
...
2.7.0 :001 > Setting.check_hour
=> 12

当我通过settings_controller.rb来创建值后,在 rails 缓存里有该字段,但是不能通过Setting.var 获取到值

# settings_controller.rb
class Admins::SettingsController < Admins::AdminsController

  def create
    setting = Setting.new(setting_params)
    if setting.save
      tip_status(1, "创建成功")
    else
      tip_status(-1, "创建失败")
    end
  end

  private

  def setting_params
    params.require(:setting).permit(:var, :value)
  end

end

# 新增hello记录后,在cache里可以查到该记录
2.7.0 :003 > Rails.cache.fetch("rails-settings-cached/setting_cache")
=> {"check_hour"=>12, "hello"=>"good"}

# 通过Setting.var,会出现报错
2.7.0 :004 > Setting.hello
NoMethodError (undefined method `hello' for #<Class:0x00007fe59ded68d8>)

请问各位大佬,我这是哪里有问题呢?该怎么解决呢?非常感谢~~

README 里说了 You must use field method to statement the setting keys, otherwise you can't use it.

不支持动态定义方法,它只是对声明的 key 进行重新赋值

也就是说我得先在 setting.rb 里定义好 key,然后才可以在 controller 里重新修改得么?那这样得话,如果是需要新增 key 得话,不是得重启服务器才能生效的啊? @ThxFly

Gem 本身就是设计用来做静态配置项的,建议动静态分开,如果有动态的需求,我是自己另外做功能放这些配置。

@brookepowel 明白了,谢谢了哈

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