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

有人知道为什么会发生这种情况吗?

您的代码似乎是正确的。因此,我将检查对象未保存的原因:

  • 对象无效?例如,
    object.valid?
    返回false。验证检查在保存之前进行
  • 你没有存钱

change方法返回一个新的日期实例,其中一个或多个元素已更改

试试这个:

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错误:无效日期