【发布时间】:2014-09-29 22:24:03
【问题描述】:
我正在尝试为经常运行的查询(即有错误的用户)创建一个范围。问题是我必须加入用户和帐户表,然后在帐户表上运行一个方法来找出哪个用户有错误。换句话说,我需要找到拥有错误帐户的用户。我可以像这样在 Account Model 上创建这个范围:
scope :with_errors -> {joins(:user).map(&:status).select{|status| status['code'] == :error}}
问题是,我必须在 Account 上定义这个范围,因为这样我就可以在连接返回的 ActiveRecord::Relation 上运行map(&:status)。所以,我的问题是:是否可以在“加入”表上运行一个方法,以便我可以在我的用户模型上定义这个范围?
谢谢!
【问题讨论】:
-
status有是一种方法吗?如果您可以使用数据库查询,例如Account.where(:status_code => 'error') -
不幸的是,
status必须是一种方法。我们将user存储在postgres 中,status存储在cassandra 中。所以,我不能利用所有很棒的 Rails 助手。谢谢!
标签: ruby-on-rails join scope relation