Ruby:在实例和类方法中重用代码

时间:2014-11-04 18:31:40

标签: ruby ruby-on-rails-4

我正在使用Rails开发一个项目,并且需要从类和实例方法中调用某段代码。我现在在类/实例方法中使用冗余代码执行以下操作。有没有更好的方法来写这个 -

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 个答案:

答案 0 :(得分:1)

如果实例和类方法min_days_to_ship相同,只需删除ClassMethods模块并添加

extend OrderHelper

include OrderHelper.

Object#extend

如果您希望min_days_to_ship在模块include d时同时成为实例和类方法,请将模块ClassMethods替换为

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

使用钩子Module#included。在这种情况下,课程extend OrderHelper中不需要Order

相关问题