【问题标题】:How to get enum value from its index in ruby-on-rails?如何从 ruby​​-on-rails 中的索引中获取枚举值?
【发布时间】:2018-01-07 21:09:44
【问题描述】:

例如,我在 ruby​​-on-rails 中有这个枚举:

class Foo < ActiveRecord::Base enum color: [ :red, :green, :blue ] end

默认情况下,索引应该是:red -> 0, :green -> 1,依此类推。

我想通过索引获取枚举值,比如说从索引1,所以结果应该是:green。可以这样做吗?

更新:

伪代码示例:

Foo.colors.find_by_index(1) # returns :green

【问题讨论】:

  • 为什么不定义一个数组而不是枚举?
  • 如果你有两列有枚举怎么办?在这种情况下,您希望 Rails 如何工作?
  • 向我发送一些示例代码,包括您的预期输出。
  • 我还将枚举用于 Formtastic 的选择输入(例如 f.input :color, as: :select, collection: Foo.colors)。枚举索引将是选项值,枚举值本身作为显示文本/标签。我认为数组不适合这种情况。另一种方法是使用哈希,但在这里我想知道是否可以通过索引获取枚举值。
  • 好吧,你可以这样做,因为Foo.colors.keys(1) #=&gt; "green" 因为colors 只是一个HashWithIndifferentAccess,所以它的行为与Hash 非常相似,但所有Symbol 键都将是@987654331 @.

标签: ruby-on-rails ruby enums


【解决方案1】:

Foo.colors 返回一个哈希:

{:red => 0, :green => 1, :blue => 2}

您可以反转哈希以获得索引值

Foo.colors.invert
# {0 => :red, 1 => :green, 2 => :blue}

【讨论】:

  • 当值是数字时使用枚举的好方法。我这样使用它: Products.categories.invert[@product.categories] 我得到了值的名称而不是整数。
【解决方案2】:

你可以试试这些

class Fooo < ActiveRecord::Base
  enum colo: {red: 0, green: 1, blue: 2}
end

【讨论】:

    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2018-01-04
    • 2014-10-23
    相关资源
    最近更新 更多