我正在使用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
谢谢!
答案 0 :(得分:1)
如果实例和类方法min_days_to_ship
相同,只需删除ClassMethods
模块并添加
extend OrderHelper
后
include OrderHelper.
如果您希望min_days_to_ship
在模块include
d时同时成为实例和类方法,请将模块ClassMethods
替换为
def self.included(klass)
klass.extend self
end
使用钩子Module#included。在这种情况下,课程extend OrderHelper
中不需要Order
。