在Rails中更改年份

时间:2011-07-27 09:51:42

标签: ruby-on-rails-3 date

我有一个获得用户生日的表单。

我想过生日并将其存储在另一个属性中,但需要当年。

我在回电中这样做

模型板

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
谁知道为什么会这样?

3 个答案:

答案 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