【发布时间】:2020-11-06 17:53:14
【问题描述】:
我有用于用户、标签和连接表标签的表。
我目前正在使用scope通过不同的变量过滤用户,例如:
scope = scope.where('users.created_at > :created_after', created_after: params[:created_after])
我正在尝试按分配给用户的标签过滤用户(通过has many 关系)。
在用户模型中:
has_many :taggings, as: :taggable
has_many :tags, through: :taggings
用户表:
╔════╦══════════════╦
║ id ║ name ║
╠════╬══════════════╬
║ 1 ║ Picard ║
║ 2 ║ Kirk ║
║ 3 ║ Sisko ║
║ 4 ║ Janeway ║
╚════╩══════════════╩
标签表:
╔════╦══════════════╦
║ id ║ Tag ║
╠════╬══════════════╬
║ 1 ║ TOS ║
║ 2 ║ TNG ║
║ 3 ║ DS9 ║
║ 4 ║ VOY ║
╚════╩══════════════╩
标签表:
╔════╦═══════════╦═══════════════╦═══════════════════════╦
║ id ║ tag_id ║ taggable_id ║ taggable_type ║
╠════╬═══════════╬═══════════════╬═══════════════════════╣
║ 1 ║ 1 ║ 1 ║ User ║
║ 2 ║ 1 ║ 4 ║ Organization ║
║ 3 ║ 2 ║ 2 ║ User ║
║ 4 ║ 1 ║ 3 ║ User ║
╚════╩═══════════╩═══════════════╩═══════════════════════╝
我尝试过类似的方法:
SELECT * FROM users u
JOIN taggings j, tags t
WHERE t.tag = <tag>
AND t.id = j.tag_id
AND j.taggable_type = 'User'
AND u.id = j.taggable_id
【问题讨论】:
标签: sql ruby-on-rails postgresql