在数组选择中使用ActiveRecord Enum

时间:2016-06-01 05:49:56

标签: ruby-on-rails activerecord

我有一个模特

class Order < ActiveRecord::Base 
  ...
  enum status: [:started, :finished, :failed, :processing]
  ...
end

并希望选择所有处理和已完成的订单。我不能简单地写

@orders = Order.where(status:  [:finished, :processing])

因为status字段自然是整数,而不是字符串或文字。所以这个语句生成

2.2.0 :008 > Order.where(status: [:finished, :processing])
   SELECT "orders".* FROM "orders" WHERE "orders"."status" IN (NULL, NULL)  

现在我做以下

@orders = Order.where(status:  [:finished, :processing].map { |s| Order.statuses[s] }

还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

如果您想通过它的名称来调用订单状态,则以下内容应该有效

@orders = Order.where(status: Order.statuses[:finished, :processing])