你好。我是Ruby on Rails和面向对象编程的新手。
我正在开发一个小型调度程序,并希望DRY我的模型方法。
我阅读了一些关于Rails中使用模块和类的文章,但找不出最佳方法。
类和模块之间的区别
ruby-class-module-mixins
例如:
假设我有两个模型(Datum和Person)。
每个模型都有一个属性,用不同的属性名称存储日期。
我在两个模块中编写了相同的日期验证方法。
我的模型:
class Datum < ActiveRecord::Base
attr :start_date
def validate_date
# same validation stuff with self.start_at
end
end
class Person < ActiveRecord::Base
attr :birth_date
def validate_date
# same validation stuff with self.birth_date
end
end
以下是我使用lib/ModelHelper和Datum Model尝试的方法:
class Datum < ActiveRecord::Base
include ModelHelper
attr_accessible :start_at
# Validations
before_validation :validate_date, :start_at
end
module ModelHelper
private
def validate_date *var
# validation stuff with birth_date and start_at
end
end
问题:
在我的情况下,我认为我需要为每个模型属性(:start_at和:bith_date)分配一个参数。但是我找不到方法。
最好的方法是使用模块或类来DRY我的模型?
为什么和如何?
validate_date
可以被拆分成一个验证器类。然后你只需要声明属性和验证规则。足够DRY了。 - D-side