活动记录查询枚举列

时间:2018-09-08 08:16:06

标签: ruby-on-rails ruby activerecord

我有一个类似这样的查询

where("user_id = ? OR privacy = ?", user_id, :public_activity)

和枚举

enum privacy: [:public_activity, :friends_activity, :private_activity]

:public_activity在此查询中不起作用,而只是作为字符串发送。是否有任何干净的方法可以编写查询而不只是使用整数,而在读取查询时将很难理解该整数?

2 个答案:

答案 0 :(得分:3)

您可以使用key来获取整数,这是一个示例

# app/models/user.rb
class Model < AR
  enum privacy: [:public_activity, :friends_activity, :private_activity]
end

获取状态整数:

Model.privacies[:public_activity] => 0

where方法:

where("user_id = ? OR privacy = ?", user_id, Model.privacies[:public_activity])

Read documentation

答案 1 :(得分:2)

documentation of enum之后,您应该能够自动使用enum定义的范围:

Model.where(user_id: user_id).or(Model.public_activity)