由于红宝石方法 select 的工作缓慢,我试图优化以下内容,将其放入超过16.000条记录中,但是我真的不知道如何将其构建到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
答案 0 :(得分:3)
我希望一个简单的joins(:rtrs)
应该能起作用,因为它能够处理has_many through
的关联并建立一个INNER JOIN
,它将仅返回至少有一个{{1} }。
rtrs
答案 1 :(得分:0)
如果您无法像@spickermann所建议的那样使用joins
,则可以将多个ActiveRecord_Relation
组合在一起:
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)