До сих пор я использовал плагин act_as_taggable_on для пометки объявлений.
Этот плагин создает следующие таблицы:
taggings: связывает таблицу тегов и объявлений (для помеченного элемента у него есть поле taggable_id, которое я переименую в "announce_id", что я объясню ниже).
теги: содержит идентификаторы и имена тегов.
На днях я обнаружил, что у меня нет возможности пометить объявления тегом определенного тега, но я делаю Announcement.tagged_with(tag_name)
, и я не хочу искать по имени, но по идентификатору.
Итак, поскольку я почти не использую функциональные возможности этого плагина, я решил создать модели для таблиц тегов и тегов, чтобы добиться этого: 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
? Потому что, когда я пытаюсь, я получаю
неопределенный метод `tags '