Rails: Has many through associations — find with AND condition, not OR condition

前端 未结 3 487
盖世英雄少女心
盖世英雄少女心 2021-02-06 19:18

I have the following query method in my ActiveRecord model:

def self.tagged_with( string )
    array = string.split(\',\').map{ |s| s.lstrip }
    select(\'disti         


        
相关标签:
3条回答
  • 2021-02-06 19:54

    You could change your select statement to the following:

    select('distinct photos.*').joins(:tags).where('tags.name = ?',  array.join(' OR '))
    

    Which will properly create the OR string in the where clause.

    ian.

    0 讨论(0)
  • 2021-02-06 20:04

    This should work:

    def self.tagged_with( string )
      array = string.split(',').map{ |s| s.lstrip }
      select('distinct photos.*').
        joins(:tags).
        where('tags.name' => array).
        group("photos.id").
        having("count(*) = #{array.size}")
    end
    

    Above will match photos that have tags red and blue at least. So that means if a photo has red, blue and green tags, that photo would match too.

    0 讨论(0)
  • 2021-02-06 20:11

    LOL the solution for this is not a simple task--I thought through it from a SQL standpoint and it was UGLY. I figured somebody else has to have tried this so I did some searching and found this post that should help you:

    HABTM finds with "AND" joins, NOT "OR"

    0 讨论(0)
提交回复
热议问题