【发布时间】:2015-02-03 17:27:03
【问题描述】:
喂。我是 Ruby on Rails 和 OOP 的新手。
我在一个小调度器上工作,并且想干掉我的模型方法。
我对 Rails 中 Module 和 Class 的使用做了一些说明,但找不到最好的方法。
difference-between-a-class-and-a-module
ruby-class-module-mixins
例子:
假设我有 2 个模型(基准和人)。
每个模型都有一个存储日期的属性,但具有不同的属性名称。
我在两个模块中编写了相同的日期验证方法。
我的模特:
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 和基准模型的尝试:
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 )。
但我不知道怎么做。
使用 Module 或 Class 干燥我的模型的最佳方法是什么?
为什么以及如何?
【问题讨论】:
-
我强烈建议您查看 codereview.stackexchange.com
-
顺便说一下,我最近在 CodeReview.SE 上发布了一个关于自定义 Rails 4 验证器的答案:codereview.stackexchange.com/questions/71435/…
-
@Anthony 我的问题不仅仅针对代码审查。它更多地是关于通过给定的示例来理解 Ruby on Rails 中的模块和类。
-
@D-side 感谢您的评论,您的回答很有帮助。但这并不能解释我的问题。 使用 Module 或 Class 干燥我的模型的最佳方法是什么? 为什么和...?我很高兴获得更多答案。
-
@stephanfriedrich 在这个特定的上下文中,
validate_date可以分解为验证器类。然后,您将只有属性和验证规则的声明。足够干燥。
标签: ruby-on-rails model module dry