我正在尝试为频繁运行的查询创建一个范围(即有错误的用户)。问题是我必须加入用户和帐户表,然后在帐户表上运行一个方法,以找出哪个用户有错误。换句话说,我需要找到有错误的帐户的用户。我可以在帐户模型上创建这个范围,如下所示:
scope :with_errors -> {joins(:user).map(&:status).select{|status| status['code'] == :error}}
问题是,我必须在Account上定义这个范围,因为我可以在从连接返回的ActiveRecord :: Relation上运行map(&:status)
。所以,我的问题是:是否可以在“已加入”表上运行方法,以便我可以在用户模型上定义此范围?
谢谢!
答案 0 :(得分:4)
This railscast给出了合并查询的示例。在你的情况下,它看起来像:
User.joins(:accounts).merge(Account.with_errors)