Rails浮动月持续时间 - NoMethodError:Float的未定义方法`months'

时间:2013-07-16 23:53:47

标签: ruby-on-rails ruby-on-rails-3

我可以1.5.days

但我怎么能1.5.months

在Rails控制台中查看我的结果:

>> 1.5.days
=> 1.5 days
>> 1.5.months
NoMethodError: undefined method `months' for 1.5:Float

1 个答案:

答案 0 :(得分:2)

请参阅弃用警告here(来自Rails 2):

  

::的ActiveSupport :: Deprecation.warn(self.class.deprecated_method_warning(:月,   “不考虑小数月份。之前将值转换为整数   叫#months。“),来电者)

自Rails 3 以来,它已被删除。

如果您查看原始来源,无论如何您都会看到这是一个令人不满意的解决方案:

ActiveSupport::Duration.new(self * 30.days, [[:months, self]])

您可以扩展float类以允许此方法:

# config/initializers/core_ext.rb

class Float
  def months
    ActiveSupport::Duration.new(self * 30.days, [[:months, self]])
  end
end

但是,我建议不要这样做。它被移除是有原因的,可能很难实现。