ruby-on-rails - 包含与加入

标签 ruby-on-rails activerecord

我有3个模型

  • 用户 - 有很多借方和很多贷方
  • 借方 - 属于用户
  • 信用 - 属于用户

借方和贷方非常相似。字段基本相同。 我正在尝试对我的模型运行查询以返回用户为 current_user 的借方和贷方中的所有字段

User.left_outer_joins(:debits, :credits).where("users.id = ?", @user.id)

正如预期的那样,从用户返回所有字段的次数与贷方和借方中的记录一样多。

User.includes(:credits, :debits).order(created_at: :asc).where("users.id = ?", @user.id)

它运行了 3 个查询,我认为它应该一次完成。

这个问题的第二部分是。如何将记录类型添加到查询中?

因为在贷方记录中会有一个额外的字段来显示贷方,借方也是如此

我已经研究过 ActiveRecordUnion gem,但我没有看到它如何解决这里的问题

最佳答案

includes 无法在一次查询中神奇地检索您想要的所有内容;它将针对您需要点击的每个模型(通常)运行一个查询。相反,它消除了 future 不必要的查询。举以下例子:

不好

users = User.first(5)
users.each do |user|
  p user.debits.first
end

这里总共有 6 个查询,一个用于 User 检索所有用户,然后一个用于循环中的每个 .debits 调用。

好!

users = User.includes(:debits).first(5)
users.each do |user|
  p user.debits.first
end

您在这里只会进行两个查询:一个针对用户,一个针对他们的相关借记。这就是 includes 通过预先加载您知道自己需要的东西来加速您的应用程序的方式。

至于您的评论,是的,将它们合并到一个表中似乎很有意义。根据您的情况,我建议您查看单表继承 (STI)。如果您不走这条路,请小心添加一个名为 type 的列,Rails 不会喜欢那样!

关于ruby-on-rails - 包含与加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42917875/

相关文章:

ruby-on-rails - postgresql中的数据库连接超时错误

ruby-on-rails - Rails 3 中的 DataMapper 与 ActiveRecord

ruby-on-rails - rails : Create association if none is found to avoid nil errors

mysql - Rails 从 Rails 中的子表中获取数据

ruby-on-rails - 如何在 Ruby 中为 new 创建一个未绑定(bind)的方法

ruby-on-rails - 未定义的方法 'add_reference'

ruby-on-rails - 两个 ActiveRecord::Relations 之间的联合

mysql - 我怎样才能安装mysql2?

ruby-on-rails - Rails 3的工厂女孩​​给出错误消息:'Validation failed: Name can't是空白的

ruby-on-rails - 安装 rails 插件时出现警告