什么是Polymorphic Associations

A slightly more advanced twist on associations is the polymorphic association. With polymorphic associations, a model can belongs to more than one other model, on a single association. For example, you might have a picture model that belongs to either an employee model or a product model. Here's how this could be declared.

polymorphic association 是一個(gè)比較亮瞎眼的高級(jí)關(guān)聯(lián)患亿,用這種關(guān)聯(lián)扎瓶,可以讓一個(gè)model被兩個(gè)或兩個(gè)以上的model擁有,一個(gè)簡單的單一關(guān)聯(lián)刽沾,例如缀蹄,你有一張pic model峭跳,同時(shí)屬于employee和product,可以這樣聲明:

class Picture < ApplicationRecord
    belongs_to :imageable, polymorphic: true
end

class Product < ApplicationRecord
    has_many :pictures, as: :imageable
end

class Employee < ApplicationRecord
    has_many :pictures, as: :imageable
end

你可以把一個(gè)polymorphic的屬于關(guān)系聲明當(dāng)作一個(gè)其他mode可以使用的接口缺前。
比如你實(shí)例化了一個(gè)Employee model蛀醉,你可以取回一個(gè)圖像的collection:@employee.pictures

同樣地,你也可以取回@product.pictures

如果你有一個(gè)實(shí)例化了一個(gè)圖片的model衅码,你可以通過@picture.imageable拯刁,為了讓這些工作有效,你需要聲明一個(gè)外鍵逝段,和一個(gè)字段類型垛玻。

class CreatePictures < ActiveRecord::Migration[5.0]
  def change
    create_table :pictures do |t|
      t.string  :name
      t.integer :imageable_id
      t.string  :imageable_type
      t.timestamps
    end
 
    add_index :pictures, [:imageable_type, :imageable_id]
  end
end

你也可以使用t.references的形式

class CreatePictures < ActiveRecord::Migration[5.0]
  def change
    create_table :pictures do |t|
      t.string :name
      t.references :imageable, polymorphic: true, index: true
      t.timestamps
    end
  end
end

下面這樣圖片可以讓你清晰的看清楚這三張model之間的關(guān)系以及polymorphic的用法

image.png

來源:Rails Guides
http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市奶躯,隨后出現(xiàn)的幾起案子帚桩,更是在濱河造成了極大的恐慌,老刑警劉巖嘹黔,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件账嚎,死亡現(xiàn)場離奇詭異,居然都是意外死亡儡蔓,警方通過查閱死者的電腦和手機(jī)郭蕉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喂江,“玉大人召锈,你說我怎么就攤上這事】牛” “怎么了烟勋?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長筐付。 經(jīng)常有香客問我卵惦,道長,這世上最難降的妖魔是什么瓦戚? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任沮尿,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘畜疾。我一直安慰自己赴邻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布啡捶。 她就那樣靜靜地躺著姥敛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞎暑。 梳的紋絲不亂的頭發(fā)上彤敛,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音了赌,去河邊找鬼墨榄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛勿她,可吹牛的內(nèi)容都是我干的袄秩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逢并,長吁一口氣:“原來是場噩夢啊……” “哼之剧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起筒狠,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤猪狈,失蹤者是張志新(化名)和其女友劉穎箱沦,沒想到半個(gè)月后辩恼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谓形,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年灶伊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寒跳。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聘萨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出童太,到底是詐尸還是另有隱情米辐,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布书释,位于F島的核電站翘贮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏爆惧。R本人自食惡果不足惜狸页,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扯再。 院中可真熱鬧芍耘,春花似錦址遇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坝初,卻和暖如春跺株,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脖卖。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工乒省, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畦木。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓袖扛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親十籍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛆封,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,476評(píng)論 0 23
  • 主人公:一對(duì)夫妻(有兒子),夫妻中男主人公的同事一女孩 故事發(fā)生一年前勾栗,男的暗送秋波那個(gè)女孩惨篱,朋友圈發(fā)布很多僅限那...
    路人甲乙組團(tuán)閱讀 304評(píng)論 0 1
  • 孩子的大腦是一片空白, 任人涂畫 于是围俘, 我便相信了罪孽砸讳。 孩子的心靈是一派單純, 隨人引導(dǎo) 所以界牡, 你便相信了邪...
    眸弋閱讀 146評(píng)論 0 2
  • 三年宿亡,一千零九十五天常遂,兩萬六千二百八十個(gè)小時(shí),九千四百六十萬零八千秒挽荠。 你走了好久好久克胳,好久。在那里會(huì)不會(huì)想我圈匆,...
    埋木未枯飄零華閱讀 361評(píng)論 1 0
  • 今天上樓時(shí)抬頭一掃看見有一層的房門旁不知道放了什么漠另,黑漆漆一團(tuán)。等上去了定睛一看才發(fā)覺是個(gè)老人臭脓,頭發(fā)斑白中帶著些焦...
    希聲孟極閱讀 210評(píng)論 0 0