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