Майк, я немного поработаю над этим ответом, но я новичок в SQL и не совсем понимаю, как применить его в своей ситуации. Если вы хотите уточнить, как будет выглядеть строка запроса, в синтаксисе Rails 3 это будет здорово. Спасибо!
я есть следующий метод запроса в моей модели 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
Тег имеет два атрибута: идентификатор и имя (строка).