在Rails 3模型中,DateTime属性是虚假的"脏"

Ada*_*cht 6 activerecord ruby-on-rails ruby-on-rails-3

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

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

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

@request.begin_date == @request.begin_date_was  # Returns true
@request.begin_date_changed?  # Returns true
Run Code Online (Sandbox Code Playgroud)

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

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

bor*_*r1s 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'
Run Code Online (Sandbox Code Playgroud)

或者您可以简单地将日期时间实例转换为:
@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)

希望它能帮助你