亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Ruby類繼承、抽象類、類拓展混入、代理類實例

2019-10-26 19:24:24
字體:
來源:轉載
供稿:網友

總結一下工作中遇到的類擴展:

1、類繼承:

當多個類公用很多方法的時候可以將公用方法部分抽取出來,需要的類做相關繼承。

例子:

代碼如下:
class A < ActiveRecord::Base
    def a
        p "it was a "
    end
end

class B<A
end

class C<A
end

B.new.a #=>"it was a "
C.new.a #=>"it was a "

2、抽象類

當多個類要繼承一個類時,用第一種方法,會遇到一個問題。
(引用一個別人的注解來描述抽象類的運用吧https://ihower.tw/rails4/activerecord-others.html)

單一表格繼承STI(Single-table inheritance)

如何將物件導向中的繼承概念,對應到關聯式資料庫的設計,是個大哉問。Rails內建了其中最簡單的一個解法,只用一個資料表儲存繼承體系中的物件,搭配一個type欄位用來指名這筆資料的類別名稱。

要開啟STI功能,依照慣例只要有一個欄位叫做type,型態字串即可。假設以下的posts資料表有欄位叫做type,那麼這三個Models實際上就會共用posts一個資料表,當然,還有這兩個子類別也都繼承到父類別的validates_presence_of :subject:
代碼如下:
class Post < ActiveRecord::Base 
    validates_presence_of :subject 
end 
 
class GuestPost < Post 
end 
 
class MemberPost < Post 
end 

讓我們進入rails console實驗看看,Rails會根據你使用的類別,自動去設定type欄位:

代碼如下:
post = GuestPost.create( :subject => "guest")
post.type # "GuestPost"
post.id # 1
post = MemberPost.create( :subject => "member" )
post.id # 2
post.type # "MemberPost"
GuestPost.last # 1

很遺憾,也因為這個慣例的關係,你不能將type這麼名字挪做它用。
STI最大的問題在於欄位的浪費,如果繼承體系中交集的欄位不多,那麼使用STI就會非常的浪費空間。如果有較多的不共用的欄位,筆者會建議不要使用這個功能,讓個別的類別有自己的資料表。要關閉STI,請父類別加上self.abstract_class = true
代碼如下:
class Post < ActiveRecord::Base 
    self.abstract_class = true 
end 
 
class GuestPost < Post 
end 
 
class MemberPost < Post 
end 

這裡的GuestPost和MemberPost就需要有自己的Migrations建立guest_posts和member_posts資料表。

你還可以在某個類中,引入多個依賴
代碼如下:
class Dependency<Post 
    require_dependency 'guestpost' 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品999| 成年无码av片在线| 欧美日韩亚洲精品一区二区三区| 91成人国产在线观看| 日韩av影片在线观看| 亚洲自拍偷拍区| 久久精品人人爽| 国产一区二区三区在线播放免费观看| 欧美最猛性xxxxx免费| 欧美另类极品videosbestfree| 中文字幕亚洲无线码a| 亚洲精品成人久久| 日本精品视频在线播放| 国产成人久久久精品一区| 久久99热这里只有精品国产| 欧美精品一区三区| 日韩欧美国产中文字幕| 欧美极品在线视频| 一本一本久久a久久精品牛牛影视| 亚洲欧美在线免费观看| 日韩网站免费观看| 亚洲午夜色婷婷在线| 欧美大片第1页| 欧美电影在线观看| 亚洲系列中文字幕| 亚洲最大福利视频网站| 欧美精品videosex性欧美| 91精品中国老女人| 黄色一区二区在线| 久久色免费在线视频| 亚洲精品美女久久久| 米奇精品一区二区三区在线观看| 色综合伊人色综合网| 日韩电视剧免费观看网站| 欧美激情精品久久久久久蜜臀| 久久久999国产| 狠狠久久五月精品中文字幕| 色综合视频一区中文字幕| 国产香蕉精品视频一区二区三区| 欧美野外猛男的大粗鳮| 一区二区三区在线播放欧美| 中文字幕亚洲欧美日韩在线不卡| 欧美黑人xxxx| 欧美精品videos另类日本| 伊人久久久久久久久久久久久| 午夜欧美不卡精品aaaaa| 国产成人精品视频在线| 久久免费国产精品1| 亚洲天堂第二页| 亚洲深夜福利视频| 久久99精品国产99久久6尤物| 日韩精品极品在线观看播放免费视频| 国产在线观看一区二区三区| 亚洲国产天堂久久综合| 久久综合伊人77777蜜臀| 国产一区二区三区在线播放免费观看| 欧美日韩中国免费专区在线看| 狠狠爱在线视频一区| 最新69国产成人精品视频免费| 亚洲精品网站在线播放gif| 久久久久久久网站| 久久久av一区| 日韩在线观看精品| 欧美大片在线影院| 国产精品久久久久久久久久ktv| 日韩欧美极品在线观看| 亚洲精品日产aⅴ| 国产精品免费一区豆花| 91啪国产在线| 亚洲欧美制服综合另类| 欧美尤物巨大精品爽| 91久久精品日日躁夜夜躁国产| 亚洲国产精品99| 91精品国产九九九久久久亚洲| 国产一区二区精品丝袜| 久久久国产精品视频| 91在线看www| 91丨九色丨国产在线| 中文字幕亚洲一区二区三区| 欧美在线视频a| 91精品国产91久久久久福利| 精品国产老师黑色丝袜高跟鞋| 精品福利在线视频| 性欧美激情精品| 日韩激情片免费| 亚洲综合国产精品| 国产色综合天天综合网| 日韩av在线网站| 成人看片人aa| 国产99久久久欧美黑人| 久久69精品久久久久久久电影好| 韩剧1988在线观看免费完整版| 国产精品久久久久福利| 中文字幕不卡在线视频极品| 91精品国产91久久久久久| 国内精品久久久久影院 日本资源| 久久久在线观看| 欧美风情在线观看| 亚洲图中文字幕| 麻豆乱码国产一区二区三区| 成人日韩在线电影| 国产视频福利一区| 国产成人综合久久| 国产精品成人国产乱一区| 国产精品男人的天堂| 欧美日韩亚洲精品一区二区三区| 久久综合网hezyo| 日韩风俗一区 二区| 国产精品极品美女粉嫩高清在线| 91在线视频成人| 亚洲精品久久久久久久久久久| 亚洲成人xxx| 亚洲一品av免费观看| 欧美性xxxxx极品娇小| 日韩精品在线播放| 丝袜情趣国产精品| 国产精品稀缺呦系列在线| 欧美黄色免费网站| 久久免费精品日本久久中文字幕| 亚洲人成啪啪网站| 色综合色综合网色综合| 国产成人一区二区三区| 欧美日韩第一页| 亚洲国产成人av在线| 欧美二区在线播放| 欧美日韩国产va另类| 91国产精品视频在线| 成人xvideos免费视频| 亚洲一区亚洲二区| 亚洲欧洲黄色网| 精品国产一区二区在线| 性欧美亚洲xxxx乳在线观看| 日韩国产精品一区| 一区二区三区在线播放欧美| 日韩欧美国产网站| 欧美天天综合色影久久精品| 国产啪精品视频网站| 欧美日韩第一页| 国产精品视频男人的天堂| 国产精品欧美一区二区三区奶水| 91免费电影网站| 国产精品视频1区| 欧美性xxxxhd| 国产福利精品在线| 亚洲国产欧美一区二区丝袜黑人| 国产成人综合精品| 成人免费直播live| 2019最新中文字幕| 国内精品久久久久久中文字幕| 欧美日韩国产精品一区| 亚洲欧美在线看| 国产成人精品a视频一区www| 国产亚洲精品综合一区91| 91免费欧美精品| 欧美色欧美亚洲高清在线视频| 国产欧美一区二区三区在线看| 国产一区欧美二区三区| 福利二区91精品bt7086| 亚洲成在人线av| 亚洲第一精品夜夜躁人人爽| 久久久免费观看视频| 国产精选久久久久久| 97视频免费在线看| 亚洲激情 国产|