查找包含特定标记的记录

时间:2017-07-17 21:11:42

标签: sql ruby-on-rails activerecord

我有以下数据库架构:

User
- id
- name (String)

UserTag
- user_id
- tag_id

Tag
- id
- key (String)

我还有一个非常复杂的用户搜索链,其中包含很多where个语句。我试图弄清楚如何将条件包含在我的链条中 - 为已分配特定标记的用户进行过滤(此标记的ID未知,只有它key已知)。

所以,这里的代码看起来或多或少:

col = User.all

col = col.where('cats_count <= 0') if args[:no_cat]
col = col.where('dogs_count <= 0') if args[:no_dog]
col = col.where('other_pets_count <= 0') if args[:no_other_pet]

# ... tag logic filtering here ...

col = col.where('age > 100') if args[:old]

我希望针对分配了Tag key=non_smoking的用户进行过滤。理想情况下,我希望它能成为数据库引擎独立的,如果这很重要 - 我在sqlite / postgres上。

老实说,我对如何处理它完全没有任何想法,我可能缺乏一些SQL知识,然后在Rails / ActiveRecord中。

1 个答案:

答案 0 :(得分:3)

您可以指定joins和放置conditions on the joined tables。所以也许是(未经测试,脱离我的头脑)

col.joins(user_tags: :tag).where(user_tags: { tag: { key: 'non_smoking' } })