Ruby on rails Rails-带枚举的Activerecord条件

Ruby on rails Rails-带枚举的Activerecord条件,ruby-on-rails,activerecord,enums,Ruby On Rails,Activerecord,Enums,我有一个Item模型和一个UserItem模型。一个项目有许多UserItems 两种模型都使用枚举: enum状态:[:待定,:已批准] 我需要查询项目以返回用户_项目,其中Item.id!=1,item.status已批准,而user_items.status处于挂起状态。我在正确的语法方面有问题 Item.join(:user\u items)。其中(“items.id!=?和items.status=?和user\u items.status=?”,1、、?) 编写此查询的正确方法是什么

我有一个Item模型和一个UserItem模型。一个项目有许多UserItems

两种模型都使用枚举:

enum状态:[:待定,:已批准]

我需要查询项目以返回用户_项目,其中Item.id!=1,item.status已批准,而user_items.status处于挂起状态。我在正确的语法方面有问题

Item.join(:user\u items)。其中(“items.id!=?和items.status=?和user\u items.status=?”,1、、?)


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

因为您正在选择UserItems,并且假设您有
所属:在
的另一侧,item
有许多关系查询如下所示

UserItem.pending.joins(:item).merge(Item.approved.where.not(id:1))
试试这个-

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

如果您不想使用范围

Item.joins(:user\u Item).其中(“items.id!=?和items.status=?和user\u items.status=?”,1,Item.statuses[:pending],UserItem.statuses[:approved])


但是使用作用域总是更好。

用户项中的任何一项处于挂起状态时,您是否需要该项?还是所有的都在等待?没有的项目怎么办?对不起,我有点不清楚,我会解决这个问题。我需要返回父项已批准但id不等于1的用户项。我的意思是,有一个“已批准”的
,有两个
用户项
,其中一个已批准,另一个未批准-是否应选择前者?@vasfed因此,所有返回的用户项都必须挂起,父项必须经过批准,且父项id不得等于1对不起,我之前没有提到这一点,但如果这是我想保留在item.rb模型中的方法的一部分,该怎么办。它还会像你拥有的那样工作吗?@user4584963从技术上讲,这并不重要。PS.用范围和
关系更新答案#合并