我有一个用例,用于在具有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' ] )
答案 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