sql - 用于获取用户关联数据的 Rails 或 SQL 查询

标签 sql ruby-on-rails ruby

我有三个具有以下字段的模型(# 之后的每个字段):

class User < ApplicationRecord
  has_many :user_tags, dependent: :destroy
end

class UserTag < ApplicationRecord
  belongs_to :user
end

class JourneyTag < ApplicationRecord
  belongs_to :journey
end

我想找到所有带有对应于用户标签的标签的旅程 - user.user_tags。如何获取这些数据?

我想做的是:

current_user.user_tags.each do |user_tag|
  JourneyTag.where(cms_tag_id: user_tag.cms_tag_id)
end

这应该给我 JourneyTag 与 user.user_tags 具有相同的 cms_tag_id 然后我想捕获 JourneyTag 的集合来找到旅行。但是上面的查询是没有用的,因为它总是返回一些 JourneyTag,即使它不匹配 user_tag.cms_tag_id

最佳答案

尝试:

Journey.joins(:journey_tags).where(journey_tags: { cms_tag_id: current_user.user_tags.pluck(:cms_tag_id) })

分解:

current_user.user_tags #=> returns all user tag ids associated 
current_user.user_tags.pluck(:cms_tag_id) #=> gives all associated cms_tag_id in single SELECT `cms_tag_id` query 
journey_tags: { cms_tag_id: current_user.user_tags.select(:cms_tag_id) } #=> executes matching WHERE against JourneyTags
Journey.joins(:journey_tags) #=> filtered JourneyTags joins with Journey

或者,您可以尝试以下手动连接:

Journey.joins(:journey_tags).joins('INNER JOIN user_tags on user_tags.cms_tag_id = journey_tags.cms_tag_id INNER JOIN users on user_tags.user_id = users.id')

关于sql - 用于获取用户关联数据的 Rails 或 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63257290/

相关文章:

mysql - SQL 输出将列转换为行

sql - Oracle 调试技术

ruby-on-rails - 未运行套件之前的 RSpec

ruby-on-rails - Rails 4与您管

jquery - 一种表单上的多个 JQuery 切换

mysql - 将 COUNT() 操作(带条件)中的值作为列连接到其他 SELECT 语句

python - 测试 SQLAlchemy 方言的正确方法是什么?

OS X Yosemite 和 Chef 上的 Ruby 错误

ruby - 使用 gsub 和 block 时传递原始字符串 PLUS 匹配?

ruby-on-rails - Rails 应用程序中的静态图像 Assets 未在 Heroku 产品中显示