Rails - 带枚举

时间:2016-04-06 15:38:53

标签: ruby-on-rails activerecord enums

我有一个Item模型和一个UserItem模型。一个Item有很多UserItems。

两种型号都使用Enum:

enum status: [ :pending, :approved]

我需要查询Item以返回user_items,其中item.id!= 1,item.status被批准,而user_items.status正在等待。我在使用正确的语法

时遇到问题

Item.joins(:user_items).where( "items.id != ? and items.status = ? and user_items.status = ?", 1, ???, ???)

编写此查询的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

由于您选择了UserItems,并假设您在belongs_to :item关系查询的另一端有has_many,因此查询将会是

UserItem.pending.joins(:item).merge(Item.approved.where.not(id:1))

答案 1 :(得分:1)

试试这个 -

UserItem.joins("LEFT OUTER JOIN items.id = user_items.id").where("items.id != ? AND items.status = ? AND user_items.status = ?", 1, "approved","pending")

答案 2 :(得分:0)

如果您不想使用范围

Item.joins(:user_item).where(“ items.id!=?and items.status =?and user_items.status =?”,1,Item.statuses [:pending],UserItem.statuses [:approved ])

但是使用范围总是更好。