Полиморфный has_many: сквозной в рельсах - PullRequest
1 голос
/ 27 марта 2012

У меня есть модель тегов, которую я хотел бы сделать полиморфной, но я не хочу, например, пять записей для тега «видео», я хочу создать тег один раз и иметь возможность использовать его наРазнообразие моделей.У меня есть некоторые вопросы, связанные с этим, но я не совсем понимаю, как заставить это работать.

Итак, у меня есть:

class Tag < ActiveRecord::Base
  belongs_to :tagable, :polymorphic => true

end

и

class Post < ActiveRecord::Base
  has_many :tags, :through => :tag_assignments

end

и

class TagAssignment < ActiveRecord::Base
      has_many :tags, :as => :taggable

end

Мне кажется, это должно сработать, но ... читая все вопросы здесь, я знаю, мне нужна опция :source => тамгде-то, чтобы связать все это вместе, но я просто не следую, как именно это сделать.Кто-нибудь может помочь?

1 Ответ

4 голосов
/ 27 марта 2012

Вы должны повторить ваши модели следующим образом:

class Tag < ActiveRecord::Base
  has_many :tag_assignments
end

class TagAssignment < ActiveRecord::Base
  belongs_to :tagable, :polymorphic => true
  belongs_to :tag
end

class Post < ActiveRecord::Base
  has_many :tag_assignments, :as => :tagable
  has_many :tags, :through => :tag_assignments
end

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

post.tags

Примечание

Вам следует рассмотреть возможность использования гема acts-as-taggable-on для вашего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...