而不是acts_as_foo
语法**,我正在考虑扩展ActiveSensor::Base < ActiveRecord::Base
,然后使用所有错误/验证/类方法/ whizbangs扩展此基类。
建议:#active_sensor.rb gem
module ActiveSensor
include ActiveRecord
autoload :VERSION, 'active_sensor/version'
autoload :ActiveSensorError, 'active_sensor/base'
autoload :Base, 'active_sensor/base'
autoload :Validations, 'active_sensor/validations'
end
优点:
我认为它看起来更干净。
架构和类构建模拟ActiveRecord
我有很多子类正在进行...想要使用:is_a?
方法检查组件是否是硬件。
缺点: 在内存中持有一个额外的继承类层...从不独立使用 不是很传统(只看到其他一个rails插件这样做)
有什么建议吗?创建一个新的:: Base类只是愚蠢的吗?如果是这样,为什么?
** acts_as_foo
模式对于Rails宝石来说很常见。此类方法被添加到每个AR对象,在加载类时加载和扩展类和实例方法。
答案 0 :(得分:0)
我想你已经回答过了。很简单,如果你扩展Base然后你将功能添加到系统中的每个Active Record类,而如果你使用acts_as_foo - 你只能将它添加到需要它的模型。
显然形成这个,如果你只想要一些模型的功能,最好使用acts_as_foo ......但是如果你想在每个模型中使用它,那么随意扩展Base。