我有一个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, ???, ???)
编写此查询的正确方法是什么?
答案 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 ])
但是使用范围总是更好。