如何在Rails中的联接表上调用方法?

spi*_*ock 0 scope join ruby-on-rails relation

我正在尝试为频繁运行的查询(即有错误的用户)创建范围。问题是我必须加入用户表和帐户表,然后在帐户表上运行方法以找出哪个用户有错误。换句话说,我需要找到具有错误帐户的用户。我可以像这样在帐户模型上创建此范围:

scope :with_errors -> {joins(:user).map(&:status).select{|status| status['code'] == :error}}
Run Code Online (Sandbox Code Playgroud)

问题是,我必须在Account上定义此范围,因为这样我就可以map(&:status)在从联接返回的ActiveRecord :: Relation上运行。因此,我的问题是:是否可以在“联接”表上运行方法,以便在用户模型上定义此范围?

谢谢!

Abr*_*han 5

此railscast提供了合并查询的示例。在您的情况下,它看起来像:

User.joins(:accounts).merge(Account.with_errors)
Run Code Online (Sandbox Code Playgroud)