在Rails 3模型中,DateTime属性错误地“脏”

时间:2011-05-01 01:36:35

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

在我的Rails 3应用程序中,如果实际对模型进行了更改,我只想在某个日志中写入一个条目。因此,如果用户没有更改任何字段并单击“提交”,则不应该有日志条目。

但似乎无论如何,Rails似乎总是认为模型的DateTime属性已经改变。

当我调试时,我在更新期间运行以下行,它们都返回true,我认为这将是一个矛盾。

@request.begin_date == @request.begin_date_was  # Returns true
@request.begin_date_changed?  # Returns true

我想知道它是否与更改初始化程序中的默认日期格式(到'%m /%d /%Y')或可能带有时区的东西有关。

我很难过,所以任何帮助都会非常感激。

3 个答案:

答案 0 :(得分:2)

您可以在en.yml语言环境文件中更改默认日期和时间格式,如下所示:(这是我的某个项目中法语格式的示例)

date:
 formats:
  default: "%d/%m/%Y"
  short: "%e %b"
  long: "%e %B %Y"
  long_ordinal: "%e %B %Y"
  only_day: "%e"
time:
 formats:
  default: "%d %B %Y %H:%M"
  time: "%H:%M"
  short: "%d %b %H:%M"
  long: "%A %d %B %Y %H:%M:%S %Z"
  long_ordinal: "%A %d %B %Y %H:%M:%S %Z"
  only_second: "%S"
 am: 'am'
 pm: 'pm'

或者您只需将日期时间实例转换为:
@ request.begin_date.strftime(“%m /%d /%Y”)== @ request.begin_date_was.strftime(“%m /%d /%Y”) 甚至:
l(@ request.begin_date,:format => your_format_in_locale_file)== l(@ request.begin_date_was,:format => your_format_in_locale_file)

希望它能帮到你

答案 1 :(得分:1)

我意识到你问的时候,你可能正在使用不同的Rails版本,但我自己偶然发现了Rails 3.2.5。显然它也是3.2.5中的回归:https://github.com/rails/rails/issues/6591

答案 2 :(得分:1)

我从谷歌搜索到达此处遇到类似的问题。它与Rails版本没有关系,但是经过一些调试我发现我分配了一个Time对象,毫秒级。在调用changed时,我回到了一系列看似相同的对象,因为它已转换为DateTime。不确定这是否可以被认为是Rails中的错误,但如果您最终遇到同样的问题,请检查您是否指定了日期时间,并在其中包含毫秒。