【问题标题】:Rails enumerize with dynamic optionsRails 使用动态选项枚举
【发布时间】:2014-10-28 09:59:02
【问题描述】:

我有一个模型来处理不同的应用程序设置。每个设置都有一个 value_type 例如字符串、整数、布尔值和枚举。如果一个设置被定义为枚举,它有很多枚举选项(只是保存为键,值与数据库中的设置的引用)。 为了处理这些枚举,我想使用Enumerize gem。我尝试了很多,但我无法从数据库中设置枚举选项。

这是我尝试定义不同枚举选项的代码。

enumerize :enum_values, in: -> { EnumOption.where(functional_parameter_id: self.id).map(&:value.to_sym) }

之后我尝试拨打Setting.find(1).enum_values,我得到nil

如果我调用Setting.enum_values.values 来获取所有可用选项,我就得到了["#<Proc:0x007fd7e78e9218@/Users/path/to/app/app/models/setting.rb:31 (lambda)>"]

是否可以动态设置枚举选项?

【问题讨论】:

  • 您使用的是哪个版本的 Rails 和 Ruby?你在哪里有这个代码?在Setting 类里面?
  • Rails 版本 4.1.5,enumerize :enum_vlaues... 在设置模型中。 Setting.findSetting.enum_values从rails控制台调用
  • 实际上来自 gem 的文档,似乎您需要提供一个默认值(以防之前没有选择/保存的值),您是否在添加此 gem 后将任何默认值设置为 enum_vlaues应用程序?如果不是,那么它不应该是 nil,就像你在 Setting.find(1).enum_values 得到的那样?
  • 现在我设置了一个默认值,但 enum_values 仍然为零。 enumerize :enum_values, in: -> { EnumOption.where(setting_id: self.id).map(&:value.to_sym) }, default: lambda { |param| EnumOption.where(setting_is: param.id).first.value.to_sym }
  • 不,我的意思是,您需要先在数据库中保存一些数据,然后才能访问它。尝试:s = Setting.find(1); s.update_attributes(:enum_values => EnumOption.where(functional_parameter_id: s.id).first(2),然后尝试您发布的有问题的其他查询:Setting.find(1).enum_values,看看它在您的 Rails 控制台中是否仍然为零。

标签: ruby-on-rails ruby database dynamic enums


【解决方案1】:

我认为您不能在枚举中使用 in 和 lamdba 文字。此功能在任何地方都没有记录,看看https://github.com/brainspec/enumerize/blob/c65867580967724479af1bffbfbea05cbfa62db4/lib/enumerize/attribute.rb#L15,似乎 enumerize 严格希望您传递一个数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    相关资源
    最近更新 更多