2014-11-04 55 views
0

我正在使用Rails進行項目工作,並且需要從類和實例方法中調用某段代碼。現在我正在使用類/實例方法中的冗餘代碼進行以下操作。有沒有更好的方式來寫這篇文章 -Ruby:在實例和類方法中重用代碼

module OrderHelper 

    extend ActiveSupport::Concern 

    def min_days_to_ship 
    #to keep it simple, but has other code/logic 
    3 
    end 

    module ClassMethods 
     def self.min_days_to_ship 
     #to keep it simple, but has other code/logic 
     3 
     end 
    end 
end 


class Order < ActiveRecord::Base 

    include OrderHelper 

    self.earliest_available 
    Date.today + OrderHelper::ClassMethods.min_days_to_ship 
    end 


    delivery_after_date 
    self.ordered_date + min_days_to_ship 
    end 

end 

謝謝!

回答

1

如果實例和類方法min_days_to_ship是相同的,只是刪除ClassMethods模塊,並添加

extend OrderHelper 

include OrderHelper. 

Object#extend

如果你想min_days_to_ship既實例和類方法每當模塊include d,與

def self.included(klass) 
    klass.extend self 
end 

它使用鉤Module#included更換模塊ClassMethods。在這種情況下,Order中不需要extend OrderHelper

+0

完美的作品!感謝卡里。 – 2014-11-04 19:51:10