亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Ruby類繼承、抽象類、類拓展混入、代理類實例

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

熱門標簽:漯河電銷 天津外呼系統怎么收費 AI電銷機器人 線路 巫師3地圖標注魔力之所 外呼線路從哪里出來的 淮安自動外呼系統供應商 柯城手機地圖如何做地圖標注 中牟外呼系統違法嗎 征服者企業地圖標注

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

1、類繼承:

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

例子:

復制代碼 代碼如下:

class A ActiveRecord::Base
    def a
        p "it was a "
    end
end

class BA
end

class CA
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 DependencyPost 
    require_dependency 'guestpost' 
    require_dependency 'memberpost' 
end 

3、類拓展混入

ruby的類是單繼承的,要實現多繼承的功能需要用mixin(參合模式)的方式,即類拓展混入來實現。例子:

復制代碼 代碼如下:

module Extract 
  def self.included(base) 
     base.extend(ClassMethods) 
  end 
  module ClassMethods 
     def a 
        p "it was a " 
     end 
  end 
end   
 
class AActiveRecord::Base 
  include Extract 
end 
 
A.new.a  #=>"it was a" 

4、代理類

當某個功能是比較復雜的,當然寫再lib中,作為一個面向函數的方法去處理很簡單,也可以用代理類的方式實現面向對象的調用。

例子:

復制代碼 代碼如下:

class AActiveRecord::Base
 def generate_schedule
    generator =  Generator::ExcelGenerator.new(self)
    generator.generate_schedule
  end
end

module Generator
  class ExcelGenerator

    attr_reader :excel,:workbook,:a,:worksheet
    attr_accessor :styles

    def initialize(a)
      @excel ||= Axlsx::Package.new
      @workbook ||= @excel.workbook
      @worksheet = @workbook.add_worksheet(:name => '測試生成一個excel文件')
      @a ||= a
      @styles ||= Hash.new
    end
   
    def generate_schedule
        #excel內容的具體定義
    end

  end
end

A.new.generate_schedule 就可以通過代理類ExcelGenerator實現一個A的類實例方法generate_schedule

當然也可以通過include 一個model的方式實現添加類實例方法,有時候也可以混合使用。另外使用代理類的好處在于多個類都需要相同方法的時候可以定義共同的部分,舉一個發郵件的例子:

復制代碼 代碼如下:

class AActiveRecord::Base
    include SendEmail
end

class BActiveRecord::Base
    include SendEmail
end

實現引入模塊:

復制代碼 代碼如下:

module SendEmail
    #include this module to class::A and B
    #use like that--  A.first.send_email
    def send_email
      Email.call_email(self)
    end
end

實現代理類:

復制代碼 代碼如下:

class Email ActionMailer::Base
  default :from => "test@email.com"

  def self.call_email(obj)
     define_method "#{obj.state}" do |obj|
       @obj = obj
       mail(:to => @obj.email, :subject => "XX標題" )
     end
     send("#{obj.state}").deliver
     #根據不同對象obj.state得到不同狀態下,定義不同方法,然后send派發調用相關對象狀態的模板。
  end
    
end

RUBY很靈活當然還有很多其他的方法實現更多的方式,以后再慢慢總結。

您可能感興趣的文章:
  • Ruby最簡單的消息服務器代碼
  • 淺析Ruby中繼承和消息的相關知識

標簽:內江 河池 西雙版納 大慶 克拉瑪依 棗莊 甘孜 南昌

巨人網絡通訊聲明:本文標題《Ruby類繼承、抽象類、類拓展混入、代理類實例》,本文關鍵詞  Ruby,類,繼承,抽象,拓展,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby類繼承、抽象類、類拓展混入、代理類實例》相關的同類信息!
  • 本頁收集關于Ruby類繼承、抽象類、類拓展混入、代理類實例的相關信息資訊供網民參考!
  • 推薦文章
    欧美激情一区二区三区在线| 久草免费资源| 日韩中文字幕一区二区不卡| 亚欧成人乱码一区二区| 一本伊大人香蕉高清在线观看| 欧美一级视| 一a一级片| 成人av在线播放| 欧美激情一区二区三区在线播放 | 欧美大片一区| 亚洲精品影院一区二区| 美女免费精品视频在线观看| 精品国产香蕉伊思人在线又爽又黄| 亚洲天堂免费| 精品视频在线观看免费 | 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 91麻豆精品国产自产在线| 日本特黄一级| 四虎影视久久久免费| 欧美国产日韩一区二区三区| 91麻豆国产福利精品| 精品在线视频播放| 中文字幕一区二区三区 精品| a级精品九九九大片免费看| 国产成a人片在线观看视频| 韩国毛片免费| 成人影视在线播放| 国产91丝袜在线播放0| 精品国产一区二区三区久久久蜜臀| 久久精品大片| 国产高清视频免费观看| 天天色成人网| 日韩专区一区| 人人干人人插| 黄视频网站免费观看| 欧美一区二区三区性| 精品视频在线看| 精品视频在线观看免费| 国产一区二区精品| 二级片在线观看| 久久精品免视看国产明星 | 久久成人综合网| 欧美18性精品| 亚洲精品中文字幕久久久久久| 久久国产精品自由自在| 亚久久伊人精品青青草原2020| 欧美18性精品| 成人a级高清视频在线观看| 国产不卡福利| 国产一区二区精品| 国产一区二区精品久久91| 国产极品白嫩美女在线观看看| 黄色福利片| 九九久久99| 国产麻豆精品| 你懂的日韩| 国产麻豆精品免费密入口| 一本伊大人香蕉高清在线观看| 国产成a人片在线观看视频 | 国产a视频| 国产国语在线播放视频| 麻豆网站在线看| 国产一区二区精品在线观看| 你懂的日韩| 沈樵在线观看福利| 一级毛片视频在线观看| 欧美α片无限看在线观看免费| 99久久网站| 亚欧乱色一区二区三区| 欧美大片aaaa一级毛片| 国产亚洲免费观看| 中文字幕一区二区三区精彩视频| 欧美另类videosbestsex| 日本特黄特色aaa大片免费| 韩国三级香港三级日本三级| 国产精品自拍一区| 一级女性全黄生活片免费| 高清一级淫片a级中文字幕| 日韩一级精品视频在线观看| 九九热精品免费观看| 久久精品道一区二区三区| 国产激情视频在线观看| 久久久久久久免费视频| 韩国三级一区| a级精品九九九大片免费看| 国产一区二区精品久| 美国一区二区三区| 日韩专区亚洲综合久久| 久久精品店| 国产麻豆精品hdvideoss| 成人av在线播放| 在线观看成人网| 在线观看成人网| 精品国产一级毛片| 亚洲精品中文字幕久久久久久| 欧美大片a一级毛片视频| 99久久精品国产免费| 精品国产香蕉伊思人在线又爽又黄| 成人高清免费| 国产综合91天堂亚洲国产| 国产美女在线观看| 99久久精品国产麻豆| 欧美国产日韩精品| 国产高清视频免费观看| 欧美大片a一级毛片视频| 成人在激情在线视频| 国产成a人片在线观看视频 | 欧美电影免费看大全| 欧美一级视| 国产欧美精品午夜在线播放| 午夜精品国产自在现线拍| 国产网站免费观看| 亚洲天堂一区二区三区四区| 韩国三级视频网站| 99久久精品国产免费| 午夜在线影院| 欧美a级片免费看| 午夜在线影院| 韩国毛片免费| 久久精品道一区二区三区| 国产原创视频在线| 欧美国产日韩久久久| 国产一区二区精品| 亚洲精品中文一区不卡| 精品国产亚洲人成在线| 日韩一级黄色| 日本伦理黄色大片在线观看网站| 国产91精品一区| 国产视频网站在线观看| 国产不卡高清| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 麻豆系列 在线视频| 黄视频网站在线观看| 中文字幕97| 国产成a人片在线观看视频 | 日本特黄特色aaa大片免费| 久久国产一久久高清| 色综合久久久久综合体桃花网| 99色视频| 亚洲精品影院久久久久久| 麻豆网站在线看| 中文字幕一区二区三区 精品| 日韩在线观看免费完整版视频| 国产美女在线一区二区三区| 免费国产一级特黄aa大片在线| 欧美一区二区三区性| 香蕉视频亚洲一级| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美另类videosbestsex高清| 九九久久国产精品大片| 亚洲第一页色| 99热视热频这里只有精品| 国产视频在线免费观看| 99久久精品国产免费| 国产视频久久久| 一级毛片视频免费| 日韩中文字幕在线亚洲一区| 国产视频一区二区在线观看| 久久99中文字幕久久| 欧美电影免费看大全| 久久久成人网| 黄视频网站免费观看| 亚洲精品久久久中文字| 精品国产一级毛片| 国产一区二区精品| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久草免费资源| a级黄色毛片免费播放视频| 99热视热频这里只有精品| 日本在线www| 国产不卡福利| 久久精品成人一区二区三区| 日韩在线观看免费| 精品久久久久久免费影院| 久草免费在线视频| 一级毛片视频在线观看| 二级片在线观看| 亚洲天堂免费| 99久久精品国产免费| 欧美a级v片不卡在线观看| 韩国毛片免费| 999精品视频在线| 欧美一级视频免费观看| 国产激情一区二区三区| 国产不卡精品一区二区三区| 九九久久国产精品大片| 日韩字幕在线| 九九久久99| 在线观看导航| 精品视频在线看 | 黄色短视屏| 国产麻豆精品高清在线播放| 精品视频免费看| 国产不卡在线观看视频| 亚洲 激情| 国产亚洲免费观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 欧美激情一区二区三区视频 | 国产激情一区二区三区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 |