通过rails中的几个枚举值选择对象

时间:2014-11-09 19:34:18

标签: ruby-on-rails-4 enums rails-activerecord

我使用枚举来存储我的模型的状态:

enum status: [ :fresh, :approved, :rejected, :returned, :completed, :removed ]

现在我想选择具有多个状态值的对象,如下所示:

Documents.find_by_status(:fresh, :returned)

我应该如何在Rails 4中正确执行?

1 个答案:

答案 0 :(得分:2)

每个enum属性在表列中都有其值的整数表示。 默认情况下,您的状态将包含值 - fresh:0,已批准:1,拒绝:2,依此类推。 获取具有一个或另一个值的实例的最简单方法是调用类似

的内容
Document.where(status: [0, 1])

为了提高可读性,您可以在模型中实现范围。

class Document < ActiveRecord::Base
  enum status: %i(fresh approved rejected returned completed removed)

  scope :find_by_status, ->(*args) { where(status: self.statuses.values_at(*args)) }
end

并以更人性化的方式使用它

Document.find_by_status(:fresh, :returned)