【问题标题】:How can I call a method on joined table in Rails?如何在 Rails 中调用连接表上的方法?
【发布时间】: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


【解决方案1】:

This railscast 给出了一个合并查询的例子。在您的情况下,它看起来像:

User.joins(:accounts).merge(Account.with_errors)

【讨论】:

  • 我决定接受这个答案,因为......好吧......它实际上回答了这个问题:) 我认为我的设置离主流有点太远了,无法得到 Rails 助手的支持。
  • 啊,我忘了你想要一个范围。好吧,如果你经常使用它,编写一个只做这两个的作用域是微不足道的。
猜你喜欢
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
相关资源
最近更新 更多