class Order
include Datamapper::Resource
property :birthday_day, String
property :birthday_month, String
property :birthday_year, String
property :birthday, Date
before :save do
@birthday = Date.new(@birthday_year.to_i, @birthday_month.to_i, @birthday_day.to_i)
end
end
它是模型的一部分,但已经足够了。 当保存字段(来自 irb 或来自 sinatra 应用程序)时:生日不保存在数据库中。但是在 irb 中,我看到对象,其中:生日存在并且它是日期格式。 更改现场手册时(来自 irb): f.birthday = Date.new 日期 f.保存 在对象和数据库中结果出现(在对象中作为日期对象,在数据库中作为“2010-2-3”)
请帮助我理解,模型中之前有什么问题。
对不起,我的英语不好。
最佳答案
您应该使用属性修改器方法。设置 ivar 不会触发脏跟踪。只需这样做:
self.birthday = Date.new(birthday_year.to_i, birthday_month.to_i, birthday_day.to_i)
另外,年月日的属性类型最好使用Integer。
关于Ruby DataMapper 不保存钩子(Hook)前设置的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5472671/