Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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
Sql Rails:获取零的父记录有许多关联_Sql_Ruby On Rails_Ruby_Activerecord_Ruby On Rails 4 - Fatal编程技术网

Sql Rails:获取零的父记录有许多关联

Sql Rails:获取零的父记录有许多关联,sql,ruby-on-rails,ruby,activerecord,ruby-on-rails-4,Sql,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 4,以下是我的联想: class User < ActiveRecord::Base has_many :tickets end class Ticket < ActiveRecord::Base belongs_to :user end 。。。这很糟糕,因为这不是Ruby的好用例。但我正在努力弄清楚如何使用SQL实现这一点 有人能告诉我一个好的,干净的SQL解决方案吗 可能类似于:User.includes(:tickets)。其中(tickets:{User\u id:n

以下是我的联想:

class User < ActiveRecord::Base
  has_many :tickets
end

class Ticket < ActiveRecord::Base
  belongs_to :user
end
。。。这很糟糕,因为这不是Ruby的好用例。但我正在努力弄清楚如何使用SQL实现这一点


有人能告诉我一个好的,干净的SQL解决方案吗

可能类似于:
User.includes(:tickets)。其中(tickets:{User\u id:nil})


在一个作用域中,它类似于
:没有_tickets,->{includes(:tickets).where(tickets:{user\u id:nil})}
可以使用SQL子查询,这可能比使用
includes()
更有效:


您也可以这样做:

User.joins("LEFT OUTER JOIN orders ON orders.user_id = users.id WHERE orders.user_id IS NULL")

尽管@oliver roset的方法对于以后阅读您的代码的人来说更简单、更容易理解。

这同样有效,但我选择上面的答案,因为它可能更清楚。然而,我想对两者进行基准测试,并确认哪一个性能更好。
User.where('id not in (select user_id from tickets)')
User.joins("LEFT OUTER JOIN orders ON orders.user_id = users.id WHERE orders.user_id IS NULL")