2010-06-16 2 views
0

До сих пор я использовал плагин act_as_taggable_on для пометки объявлений.Проблемы построения отношений между моделями

Этого плагин создает следующие таблицы:

оснащения: относится теги и объявление таблица (для маркированного элемента, он имеет поле под названием taggable_id, который я переименовывать в «announcement_id» за то, что я объясню ниже) ,

теги: имеет идентификаторы и имена тегов.

На днях я обнаружил, что у меня не было возможности получить анонсы с определенным тегом, но делать Announcement.tagged_with(tag_name), и я не хочу искать по имени, но для id.

Итак, поскольку я почти ничего не использую в функциональности этого плагина, я решил создать модели для таблиц тегов и тегов, чтобы выполнить это: Announcement.tags.

отношения моделях выглядят следующим образом:

EDIT:

class Tagging < ActiveRecord::Base 
    belongs_to :announcement 
    belongs_to :tag 
end 

class Tag < ActiveRecord::Base 
    has_many :taggings 
    has_many :announcements, :through => :taggings 
end 

class Announcement < ActiveRecord::Base 
    has_many :taggings 
    has_many :tags, :through => :taggings 

Почему я не могу выполнить команду Announcement.tags? Потому что, когда я пытаюсь, я получаю

неопределенных метод `тегов

ответ

1

Что вы на самом деле писали, что вы уже пробовали Announcement.tags. Но tags будет методом на экземпляре Announcement, и это вызывает его как метод класса Announcement, который не будет работать.

Предполагая, что вы на самом деле вызов an_announce.tags, вы также должны Announcement и Tag иметь много taggings - вот так:

class Announcement < ActiveRecord::Base 
    has_many :taggings 
    has_many :tags, :through => :taggings 
end 

class Tag < ActiveRecord::Base 
    has_many :taggings 
    has_many :announcements, :through => :taggings 
end 
1

вы должны попробовать @ announcement.tags, поскольку теги являются методом экземпляра класса Объявления (модель).

@announcement = Announcement.first 
+0

Итак, что, если я хочу получить все объявления, отмеченные определенным tag_id? –

+0

'Tag.find (tag_id) .announcements' – Chowlett

+0

Это не работает. –

Смежные вопросы