我有以下数据库架构:
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中。
答案 0 :(得分:3)
您可以指定joins
和放置conditions on the joined tables。所以也许是(未经测试,脱离我的头脑)
col.joins(user_tags: :tag).where(user_tags: { tag: { key: 'non_smoking' } })