Есть ли название для этой общей модели Ruby on Rails? Polylink? - PullRequest
0 голосов
/ 06 августа 2009

Кажется, нет имени для этой общей модели модели.

Он используется во многих плагинах, таких как acts_as_taggable[_whatever], и в основном позволяет
связать определенную модель, такую ​​как Tag, с любой другой моделью без необходимости ставить
все более и более принадлежащие операторы в модели тегов.

Работает, если ваша модель (Tag) связана с моделью полиморфного соединения (Tagging)
представляющий таблицу соединений. Это создает автономную модель, в которой любой
другая модель может относиться.
(Они связаны через has_many: as & a has_many: through)

Я часто хочу называть этот тип модельных отношений одной вещью.
Может быть, назвать это «модель с полилинк» или «модель с полилинк»?
Например, «Сделайте это моделью с полилинками и свяжите ее с любыми другими моделями при кодировании».

Есть другие предложения?

Вот внутренняя схема для acts_as_taggable моделей:

class Tag < ActiveRecord::Base
  has_many :taggings
end

class Tagging < ActiveRecord::Base
  belongs_to :tag
  belongs_to :taggable, :polymorphic => true
end

class Whatever < ActiveRecord::Base
  has_many :taggings, :as => :taggable, :dependent => :destroy
  has_many :tags, :through => :taggings
end

class CreateTaggings < ActiveRecord::Migration
  def self.up
    create_table :taggings do |t|
      t.references :tag
      t.references :taggable, :polymorphic => true
      t.timestamps
    end 
  end
end

1 Ответ

2 голосов
/ 06 августа 2009

В Rails jargon я видел это, обычно упоминаемое как "has_many :through". С полиморфизмом «полиморфный has_many :through». Если исходить из жаргона Rails, я думаю, что общий паттерн можно назвать «полиморфным отношением многих ко многим».

...