Ruby on rails 3 在Rails中更改日期的年份
我有一个表单,可以得到用户的生日 我想获取生日并将其存储在另一个属性中,但获取当前年份 我是在回电话的时候做的 样板 保存前:设置交货日期Ruby on rails 3 在Rails中更改日期的年份,ruby-on-rails-3,date,Ruby On Rails 3,Date,我有一个表单,可以得到用户的生日 我想获取生日并将其存储在另一个属性中,但获取当前年份 我是在回电话的时候做的 样板 保存前:设置交货日期 def set_delivery_date self.delivery_date = self.birthday self.delivery_date.change(:year => Time.now.year) end 生日是1920-07-27 这似乎并没有改变日期 有人知道怎么做吗 更新 以下工作我可以在数据库中看到新日期: self.de
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
有人知道为什么会发生这种情况吗?您的代码似乎是正确的。因此,我将检查对象未保存的原因:
- 对象无效?例如,
返回false。验证检查在保存之前进行object.valid?
- 你没有存钱
def set_delivery_date
self.delivery_date = self.birthday
self.delivery_date = self.delivery_date.change(:year => Time.now.year)
end
ActiveRecord的功能不知道您所做的更改。有两种方法可以解决此问题:
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
我尝试了两种解决方案,现在我得到了无效的日期。很奇怪,因为我只是在改变年份。有什么想法吗?self.birth.change(:year=>Time.now.year产生了一个无效的日期异常你可以发布你的测试,或者在实际开始使用它之前验证
birth
。注意闰年,例如date=date.parse('29/02/2016');date.change(year:date.year+1)#=>argument错误:无效日期
。