Как вы знаете, Events.tagged_with("my_tag")
возвращает список событий, соответствующих вашим тегам.
Затем вы можете использовать карту или собрать оператора в этом списке, чтобы получить список дат для каждого события.
`map{|e| e.dates}`
Это возвращает список дат массивов, где каждый массив список дат, связанных с этим событием в этом индексе списка, возвращаемого Events.tagged_with("my_tag")
Чтобы заказать по дате вам нужно расплющить и сортировки.
flatten.sort{|a,b| a.created_at <=> b.created_at}
Заставить весь вызов метода:
Events.tagged_with("my_tag").map{|e| e.dates}.flatten.sort{|a,b| a.created_at <=> b.created_at}
Вы можете упростить это с именем сферы по датам. Это будет более быстрый запрос, но я не могу написать его для вас, не зная больше о структуре вашей базы данных.
Это будет выглядеть примерно так, предполагая, что даты относятся к событию:
class Date < ActiveRecord::Base
...
named_scope :for_tag, lambda do |tag|
{:joins => [:tags, :taggings],
:conditions => ["tags.name = ? AND tags.id = taggings.tag_id \
AND taggings.taggable_id = dates.event_id AND \
taggings.taggable_type = event", tag],
:order => 'dates.created_at'}
end
end
Вы могли бы сделать Date.for_tag("my_tag")
и получить тот же список, в гораздо более эффективным SQL запроса.
Спасибо, первое решение работало отлично. Во-вторых, у меня возникают проблемы (возможно, потому, что вы не знаете точную структуру db, как вы сказали). Я скорректировал его в меру своих возможностей, но я получаю сообщение о том, что ассоциация «тегов» не существует. Немного посмотрев на него, похоже, что он вызван: объединяет часть кода, потому что для дат не существует привязки тегов. Есть идеи? – Ryan
Я не использовал act_as_taggable_on, поэтому я предположил, что он неявно определяет отношения has_many с тегами, он должен иметь другое имя. Посмотрите на действия \ _as \ _taggable \ _on source, чтобы выяснить, к каким таблицам присоединиться. В крайнем случае я мог бы посмотреть на это, но вам нужно будет опубликовать фрагменты ваших моделей, которые определяют отношения и теги. Как и в только строках с \ _many/принадлежит \ _to/act \ _as \ _taggable/действует \ _as \ _taggable \ _on – EmFi
Теперь, когда я понимаю, что это проблема отношений, я смогу понять это позже сегодня. Извините за задержку и спасибо за вашу помощь. Я выложу здесь, когда я закончил для всех, у кого может быть такая же проблема. – Ryan