Ruby on rails Rails模型找到不相等的地方

Ruby on rails Rails模型找到不相等的地方,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,如何在不相等的条件下查找数据库中的记录?我现在有了这个,但是有没有一种奇特的方法呢 GroupUser.where('user_id != ?',me) 你唯一能让它更时尚的方法就是用它 MetaWhere有一个较新的近亲,名为,它允许这样的代码: GroupUser.where{user_id != me} GroupUser.where("user_id != ? OR user_id IS NULL", me) 不用说,如果这是你将要进行的唯一重构,那么使用gem是不值得的,我会坚持

如何在不相等的条件下查找数据库中的记录?我现在有了这个,但是有没有一种奇特的方法呢

GroupUser.where('user_id != ?',me)

你唯一能让它更时尚的方法就是用它

MetaWhere有一个较新的近亲,名为,它允许这样的代码:

GroupUser.where{user_id != me}
GroupUser.where("user_id != ? OR user_id IS NULL", me)
不用说,如果这是你将要进行的唯一重构,那么使用gem是不值得的,我会坚持你所得到的。在许多复杂查询与Ruby代码交互的情况下,squel非常有用。

在Rails 4.x中(请参阅)

在Rails 3.x中

GroupUser.where(GroupUser.arel_table[:user_id].not_eq(me))
要缩短长度,您可以将
GroupUser.arel\u表
存储在变量中,或者如果在模型
GroupUser
本身内部使用,例如在
范围
中,您可以使用
arel\u表[:user\u id]
而不是
GroupUser.arel\u表[:user\u id]

Rails 4.0语法归功于Rails 4

GroupUser.where.not(user_id: me)

处理关联时,应始终在SQL查询中包含表名

事实上,如果另一个表具有
user\u id
列,并且您将这两个表合并,那么SQL查询中的列名将不明确(即问题)

因此,在您的示例中:

GroupUser.where("groups_users.user_id != ?", me)
或者更详细一点:

GroupUser.where("#{table_name}.user_id IS NOT ?", me)
请注意,如果您使用的是散列,则无需担心,因为Rails会为您处理它:

GroupUser.where(user: me)
在Rails 4中,正如@dr4k3所说,添加了查询方法
not

GroupUser.where.not(user: me)
轨道4:

如果要同时使用“不相等”和“相等”,可以使用:

user_id = 4
group_id = 27
GroupUser.where(group_id: group_id).where.not(user_id: user_id)

如果您想在Rails 3中使用各种运算符(例如,
),我不知道有什么更有趣的。但是,我不确定您是否意识到,您的不相等条件与(user\u id)空值不匹配。如果您想这样做,您必须执行以下操作:

GroupUser.where{user_id != me}
GroupUser.where("user_id != ? OR user_id IS NULL", me)

MetaWhere很好,但是这个任务可以在不添加gem的情况下完成。@tybro0103当然可以完成这个任务(我觉得OP的方式非常好),问题是如何做得更花哨。因此,如果你认为没有宝石也可以做得更花哨,我会对如何做非常感兴趣。Vikrant的回答确实提供了一个解决方案,不涉及sql或包括其他宝石。但是,我要纠正的是,你的回答肯定是对编码人员最友好/最花哨的。添加宝石来完成这样一个si简单的任务。用火箭筒击中一个mozzy是过分的。在关联中呢?-有很多:组用户,->{where.not(状态:“谢绝”)},通过::组,外键:“user\u id”作为旁注,它也可以很好地链接:
GroupUser.where(其他条件:true)。where.not(user\u id:user\id)
关于
GroupUser.where(group\u id:group\u id)。where.not(user\u id:user\u id)
?@EnricoCarlesso感谢您的发布。我更新了我的答案,加入了您的建议。谢谢。我认为您所拥有的是非常好的Rails 3方法。