gpt4 book ai didi

ruby-on-rails - 包含与加入

转载 作者:行者123 更新时间:2023-12-02 15:12:25 25 4
gpt4 key购买 nike

我有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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com