0

Допустим, у меня есть модель A, которая имеет ассоциацию 1 к 1 с моделью B. Модель B установлена ​​в «act_as_taggable». Я хотел бы вернуть активное отношение записи, которое выбирает все экземпляры A, у кого есть атрибут B, tagged_with определенной строки. Это будет выглядеть примерно так: A.where («? B.tagged_with =», «some_tag»)Rails: act-as-taggable-on: Использование tagged_with по отношению

Я нашел this SO вопрос, но я заинтересован в получении активной записи отношения назад, так только второе решение и я не могу заставить его работать. Как я могу вернуть активные отношения записи, чтобы я мог вызывать другие методы params запроса на нем, т.е. . A.b_tagged_with ('тега'), где (...), где b_tagged_with является именованной

ответ

0

ответить на мой собственный вопрос, мое определение сферы в 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 связаны с тегами, если ассоциация тегов taggings имеет значение «name», равное параметру, который мы передали. В этом примере B «act_as_taggable», A нет. Это позволяет мне:

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 
Смежные вопросы