Sql 优化rails查询删除选择方法

Sql 优化rails查询删除选择方法,sql,ruby-on-rails,ruby,Sql,Ruby On Rails,Ruby,我正在尝试优化以下内容,因为从ruby到16000多条记录的方法选择工作进展缓慢,但我真的不知道如何将其构建到SQL查询或使用联接和包含: User.invited.not_rejected.order('users.updated_at desc').select{|x| x unless x.rtr.nil?} 这些关系是: class User < ApplicationRecord hass_many :transition_elements has_many :rtrs

我正在尝试优化以下内容,因为从ruby到16000多条记录的方法选择工作进展缓慢,但我真的不知道如何将其构建到SQL查询或使用联接和包含:

User.invited.not_rejected.order('users.updated_at desc').select{|x| x unless x.rtr.nil?}
这些关系是:

class User < ApplicationRecord
  hass_many :transition_elements
  has_many :rtrs, through: :transition_elements

  scope :not_rejected -> { where(rejected: false) }
  scope :invited -> { where(invited: true) }
end

class TransitionElement < ApplicationRecord
  has_many :rtrs
  belongs_to :user
end

class Rtr < ApplicationRecord
  belongs_to :transition_element
end
class用户{where(rejected:false)}
作用域:受邀->{where(受邀:true)}
结束
类TransitionElement
我希望一个简单的
连接(:rtrs)
应该可以工作,因为它能够处理
有许多通过
关联的内容,并构建一个
内部连接,该连接将只返回至少有一个
rtrs
的用户

User.joins(:rtrs).invited.not_rejected.order(updated_at: :desc)

我希望一个简单的
连接(:rtrs)
应该可以工作,因为它能够处理
有许多通过
关联的内容,并构建一个
内部连接,该连接将只返回至少有一个
rtrs
的用户

User.joins(:rtrs).invited.not_rejected.order(updated_at: :desc)

如果您无法像@spickermann建议的那样使用
连接
,您可以将多个
ActiveRecord\u关系
s组合在一起:

users = User.not_rejected.invited.order(updated_at: desc)
users.where(rtrs: Rtr.all)
或者,如果您在
Rtr
上有一个作用域,您可以使用它:

class Rtr < ApplicationRecord
  scope :upside_down, where(upside_down: true)
end

users.where(rtrs: Rtr.upside_down)
class Rtr
如果您无法使用@spickermann建议的
连接,您可以将多个
ActiveRecord\u关系组合在一起:

users = User.not_rejected.invited.order(updated_at: desc)
users.where(rtrs: Rtr.all)
或者,如果您在
Rtr
上有一个作用域,您可以使用它:

class Rtr < ApplicationRecord
  scope :upside_down, where(upside_down: true)
end

users.where(rtrs: Rtr.upside_down)
class Rtr