在与另一个Rails具有has_many关系的模型上应用NOT IN like条件

时间:2018-04-03 07:40:38

标签: mysql ruby-on-rails activerecord

我有一个用例,用于在具有has_many关联的模型的where子句中应用 NOT IN 之类的条件。

我的用户模型与事件具有 has_many 关系。

为了获得具有特定事件的所有用户,以下代码会有所帮助。

User.find(:all, joins: :events, conditions: [events.event_name = 'Event One'] )

我正在寻找一种最佳方式来完成此操作的反向,例如,以获取没有特定事件的所有用户。

User.find(:all, joins: :events, conditions: [clause to fetch all users who do not have event_name 'Event One' ] )

这样的东西

3 个答案:

答案 0 :(得分:1)

您可以使用以下

进行查询
User.where("id NOT IN (?)", User.joins(:events).where("events.name = ?", "Event One").map(&:id))

我希望这对你有所帮助。

答案 1 :(得分:0)

按如下方式修改查询:

User.find(:all, joins: :events, conditions: [events.event_name != 'Event One'] )

如果这不起作用,那么您可以尝试下面的内容。

User.joins(:events).where('events.event_name != ?', 'Event One').distinct

您还可以查看其他替代方法以获取uniq记录here

答案 2 :(得分:0)

查询可以如下:

User.joins(:events).where.not(events: { name: ["Event One"] }).all