Ruby on rails 使用活动记录将数据放入数据库时转换数据
在数据库中存储/加载数据时,转换数据(字段值)的最干净方法是什么 我通常转换用户在模型类中输入的值:Ruby on rails 使用活动记录将数据放入数据库时转换数据,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,在数据库中存储/加载数据时,转换数据(字段值)的最干净方法是什么 我通常转换用户在模型类中输入的值: def date_str format_date(self.date) end def date_str=(str) self.date = DateParser.parse(str) end (注意:内部日期分析器是不够的,它没有涵盖我们的许多区域设置日期表示法样式) 这已经很好了,但是我不让我用通常的RoR方法检查有效性,因为我们不存储用户输入的字符串。如
def date_str
format_date(self.date)
end
def date_str=(str)
self.date = DateParser.parse(str)
end
(注意:内部日期分析器是不够的,它没有涵盖我们的许多区域设置日期表示法样式)
这已经很好了,但是我不让我用通常的RoR方法检查有效性,因为我们不存储用户输入的字符串。如果日期有任何错误,我通常会让解析器函数返回nil,但这对用户来说并不友好——我真的无法判断用户是否没有输入任何内容或只是一个无效值
我正在寻找某种方法来更好地将转换集成到A::R世界中,如果转换失败,我可以在那里生成一些有用的错误消息。最好是我可以使用与A::R::Adapter内部使用的相同的工具
有人有什么好主意吗?还有什么其他方法 您建议的方式很好,另一种选择是
attr_accessor :when
before_validation :update_date
def update_date
self.date = parse_date(self.when) if self.when
end
def parse_date(date_as_string)
# do something with the date
end
但是,您必须自己编写验证。这并不理想,但不应该有那么多代码
如果您计划在应用程序中使用此功能,您也应该考虑编写自定义验证程序,您可以在此处获得更多信息:
提供了一个很好的dsl来完成这类工作:
class Klass < ActiveRecord::Base
normalize_attributes :date do |value|
value.is_a?(String) ? DateParser.parse(value) : nil
end
end
类Klassbefore_validation :convert_date
def convert_date
self.date = DateParser.parse(self[:date])
end
嗯,但是setter方法有什么不同呢?在验证过程中,只有解析后的值才可以访问,对吗?