在我的Rails 3应用程序中,如果实际对模型进行了更改,我只想在某个日志中写入一个条目。因此,如果用户没有更改任何字段并单击“提交”,则不应该有日志条目。
但似乎无论如何,Rails似乎总是认为模型的DateTime属性已经改变。
当我调试时,我在更新期间运行以下行,它们都返回true,我认为这将是一个矛盾。
@request.begin_date == @request.begin_date_was # Returns true
@request.begin_date_changed? # Returns true
我想知道它是否与更改初始化程序中的默认日期格式(到'%m /%d /%Y')或可能带有时区的东西有关。
我很难过,所以任何帮助都会非常感激。
答案 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中的错误,但如果您最终遇到同样的问题,请检查您是否指定了日期时间,并在其中包含毫秒。