Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在与另一个Rails有许多关系的模型上应用“不相似”条件_Mysql_Ruby On Rails_Activerecord - Fatal编程技术网

Mysql 在与另一个Rails有许多关系的模型上应用“不相似”条件

Mysql 在与另一个Rails有许多关系的模型上应用“不相似”条件,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,在where子句中,我有一个用例可以应用于具有多个关联的模型的NOT IN like条件 我有一个与事件有很多关系的用户模型 要获取所有具有特定事件的用户,下面的代码很有帮助 User.find(:all, joins: :events, conditions: [events.event_name = 'Event One'] ) 我正在寻找一种最佳的方法来实现这一点的相反效果,例如,获取没有特定事件的所有用户 类似于User.find:all,joins::events,condition

在where子句中,我有一个用例可以应用于具有多个关联的模型的NOT IN like条件

我有一个与事件有很多关系的用户模型

要获取所有具有特定事件的用户,下面的代码很有帮助

User.find(:all, joins: :events, conditions: [events.event_name = 'Event One'] )
我正在寻找一种最佳的方法来实现这一点的相反效果,例如,获取没有特定事件的所有用户


类似于User.find:all,joins::events,conditions:[获取所有没有事件名称“event One”的用户的子句]

修改查询如下:

User.find(:all, joins: :events, conditions: [events.event_name != 'Event One'] )
User.joins(:events).where.not(events: { name: ["Event One"] }).all
如果这不起作用,那么你可以尝试下面的方法

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

您还可以检查其他选项以获取uniq记录

您可以使用下面的查询

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

我希望这对你有帮助

查询可以如下所示:

User.find(:all, joins: :events, conditions: [events.event_name != 'Event One'] )
User.joins(:events).where.not(events: { name: ["Event One"] }).all

改为User.find:all,joins::events,conditions:[events.event\u name!=“event One”]不起作用,因为默认情况下join是一个内部连接,对于用户拥有的所有其他event\u name,not equals检查将为true,并将给出不需要的结果,例如用户\u 1是否有十个其他事件和“event One”,这将返回用户_1十次,即使用户_1有“事件一”。这将不起作用,因为默认情况下,连接是一个内部连接,对于用户拥有的所有其他事件_名称,“不等于”检查将为真,并将给出不期望的结果,例如用户_1是否有十个其他事件和“事件一”,这将返回用户\u 1十次,即使用户\u 1有“事件1”,您可以在ActiveRecord::Relation上使用distinct来获取uniq记录,请检查更新的应答仍然用户\u 1不应该出现在结果集中,因为它已经有一个名为“事件1”的事件,这并不能消除该事件。