У меня есть следующий метод запроса в моей модели ActiveRecord:
def self.tagged_with( string )
array = string.split(',').map{ |s| s.lstrip }
select('distinct photos.*').joins(:tags).where('tags.name' => array )
end
Итак, он находит все записи, теги которых взяты из списка через запятую и преобразованы в массив.
В настоящее время это сопоставляет записи с ЛЮБЫМИ совпадающими тегами - как я могу заставить его работать там, где оно соответствует ВСЕМ тегам.
IE: если в данный момент, если я введу: "синий, красный", тогда я получу все записи, отмеченные синим ИЛИкрасный.
Я хочу сопоставить все записи, отмеченные синим и красным.
Предложения?
- РЕДАКТИРОВАТЬ -
Мои модели такие:
class Photo < ActiveRecord::Base
...
has_many :taggings, :dependent => :destroy
has_many :tags, :through => :taggings
...
def self.tagged_with( string )
array = string.split(',').map{ |s| s.lstrip }
select('distinct photos.*').joins(:tags).where('tags.name' => array )
end
...
end
class Tag < ActiveRecord::Base
has_many :taggings, :dependent => :destroy
has_many :photos, :through => :taggings
end
class Tagging < ActiveRecord::Base
belongs_to :photo
belongs_to :tag
end
Тег имеет два атрибута: идентификатор и имя (строка).