ruby-on-rails - Rails 嵌套连接与第三个模型
问题描述
我有 3 个模型。
用户.rb
has_many :user_cards
用户卡.rb
belongs_to :CardGroup
我想在一个查询中获取所有用户,以及卡片和 CardGroup 信息。
User.joins("LEFT OUTER JOIN user_cards ON user_cards.user_id = users.id AND user_cards.created_at BETWEEN '#{@start_time.to_s(:db)}' AND '#{@end_time.to_s(:db)}'")
.group('users.id, users.mobile, user_cards.user_id, user_cards.bin)
.select(
'users.id AS uid, users.name AS uname, users.mobile AS umobile,' \
'count(distinct(user_cards.id)) AS total_cards, \
'user_cards.bin AS card_bins'
)
现在,我也想加入第三个模型 CardGroup 并在上面的查询中获取 user_card.card_group.name 。
如何使用嵌套连接/任何其他方式来做到这一点?
解决方案
首先,您应该在 ruby 中使用蛇形盒。
belongs_to :card_group
其次,你的这部分join
陈述最好放在一个where
子句中。
AND user_cards.created_at BETWEEN '#{@start_time.to_s(:db)}' AND '#{@end_time.to_s(:db)}'"
第三,连接查询本身在 Ruby 中更具可读性。这就是为什么您首先将关系放在模型上。所以替换:
LEFT OUTER JOIN user_cards ON user_cards.user_id = users.id
和
User.left_outer_joins(:user_cards)
现在添加通过第 2 个连接的第 3 个模型非常简单:
User.left_outer_joins(user_cards: :card_group)
推荐阅读
- javascript - 用于捕获浏览器窗口大小调整的 React JS 函数不起作用
- python - SQLite3 表未正确保存
- android - 如何动态设置视图的宽度
- github - 在组织级别启用 Github 中的分支保护规则
- mysql - 选择具有用户自己时间范围的行
- c# - 尝试在 VSTO 中获取内部 SheetId 以帮助检测工作表重命名
- mysql - MYSQL从ID和seq_num的表中查找下一个seq_num
- amazon-web-services - 如何在 AWS 弹性豆茎上部署 MEAN 堆栈应用程序?
- python - 将节点标签添加到散景网络图中的连接节点
- google-apps-script - 在 Google 表单的键中设置正确答案