Rails: actions-as-taggable-on: использование tagged_with в отношении - PullRequest
0 голосов
/ 21 декабря 2011

Допустим, у меня есть модель A, которая имеет связь 1 к 1 с моделью B. Для модели B установлено значение 'actions_as_taggable'.Я хотел бы вернуть отношение активной записи, которое выбирает все экземпляры A, чей атрибут B помечен с определенной строкой.Это будет выглядеть примерно так: A.where ('b.tagged_with =?', 'Some_tag')

Я нашел этот ТАК вопрос, но мне интересно получить активную записьОтношение назад, так что применимо только 2-е решение, и я не могу заставить его работать.Как я могу вернуть активные записи отношений, чтобы я мог вызвать другие методы параметров запроса на него, т.е.A.b_tagged_with ('tag'). Где (...) где b_tagged_with является именованной областью действия

1 Ответ

0 голосов
/ 22 декабря 2011

, чтобы ответить на мой собственный вопрос, мое определение объема в A выглядит следующим образом:

    scope :tagged_with, lambda { |tag|
    {
        :joins => "INNER JOIN taggings ON taggings.taggable_id = as.b_id\
                   INNER JOIN tags ON tags.id = taggings.tag_id AND taggings.taggable_type = 'B'",
        :conditions => ["tags.name = ?", tag]
    }
  }

Это говорит о том, что возвращаются все модели A, чьи b-члены связаны с тегированием, если ассоциация тегов этого тега имеет значение «name», равное параметру, который мы передали. В этом примере B 'acts_as_taggable', A hasn ' т. Это позволяет мне сделать:

a = A.new
b = B.new
b.tag_list = ['tag1', 'tag2', 'tag3']    
a.b = b
new_a = A.tagged_with('tag1').ordered(...
#At this point new_a.last == a
...