我有一个获得用户生日的表单。
我想过生日并将其存储在另一个属性中,但需要当年。
我在回电中这样做
模型板
before_save:set_delivery_date
def set_delivery_date
self.delivery_date = self.birthday
self.delivery_date.change(:year => Time.now.year)
end
生日是1920-07-27
这似乎没有改变日期。
任何人都知道怎么做?
更新
以下作品我可以在数据库中看到新日期:
self.deliver_on = self.birthday.change(:year => Time.now.year)
但是,当我尝试进行rspec测试或在控制台中尝试它时会产生以下错误:
ArgumentError: invalid date
谁知道为什么会这样?
答案 0 :(得分:8)
change方法返回一个更改了一个或多个元素的新日期实例。
试试这个:
def set_delivery_date
self.delivery_date = self.birthday
self.delivery_date = self.delivery_date.change(:year => Time.now.year)
end
答案 1 :(得分:0)
您的代码似乎正确无误。所以我会检查你的对象没有保存的原因:
object.valid?
返回false。验证检查在保存之前进行。答案 2 :(得分:0)
ActiveRecord的Dirty Object功能无法了解您的更改。有两种方法可以解决这个问题:
def set_delivery_date
self.delivery_date = self.birthday
self.delivery_date = self.delivery_date.change(:year => Time.now.year)
# Shorter
self.delivery_date = self.birthday.change(:year => Time.now.year)
end
或告诉ActiveRecord您的更改:
def set_delivery_date
self.delivery_date = self.birthday
self.delivery_date_will_change!
self.delivery_date.change(:year => Time.now.year)
end