Mar*_*nto 2 activerecord ruby-on-rails
我有3个模型
借方和贷方非常相似。字段基本相同。我正在尝试对我的模型运行查询以返回用户为 current_user 的借方和贷方的所有字段
User.left_outer_joins(:debits, :credits).where("users.id = ?", @user.id)
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,从用户返回所有字段的次数与贷记和借记中的记录一样多。
User.includes(:credits, :debits).order(created_at: :asc).where("users.id = ?", @user.id)
Run Code Online (Sandbox Code Playgroud)
它运行了 3 个查询,我认为它应该在一个查询中完成。
这个问题的第二部分是。如何将记录类型添加到查询中?
因为在来自贷方的记录中会有一个额外的字段来显示贷方,借方也是如此
我已经研究了 ActiveRecordUnion gem,但我没有看到它将如何解决这里的问题
includes无法在一次查询中神奇地检索您想要的所有内容;它将为您需要点击的每个模型(通常)运行一个查询。相反,它消除了未来不必要的查询。以下列例子为例:
users = User.first(5)
users.each do |user|
p user.debits.first
end
Run Code Online (Sandbox Code Playgroud)
这里总共有 6 个查询,一个是 User 检索所有用户,然后.debits是循环中的每个调用一个。
users = User.includes(:debits).first(5)
users.each do |user|
p user.debits.first
end
Run Code Online (Sandbox Code Playgroud)
您将在此处只进行两项查询:一项针对用户,一项针对其关联的借方。这就是includes通过急切加载您知道需要的东西来加速您的应用程序的方式。
至于您的评论,是的,将它们组合成一张桌子似乎很有意义。根据您的情况,我建议您查看单表继承 (STI)。如果你不走这条路,小心添加一个名为 的列type,Rails 不会喜欢那样的!
| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |