Rails关联触摸总是编辑updated_at,尽管有些内容没有更改



我在Rails关联中遇到了触摸指令的严重问题。

它总是在时间戳处编辑updated_at。这很奇怪,因为当关联的对象没有改变时,总是更新时间戳。

放置

class Place < ActiveRecord::Base
has_one     :location,        inverse_of: :place, dependent: :destroy
attr_accessible :name
attr_accessible :location_attributes
accepts_nested_attributes_for :location
end

和位置

class Location < ActiveRecord::Base
belongs_to :place, inverse_of: :location, touch: true
attr_accessible :number, :street, :locality, :region, :postal_code, :country, :description, :description_en, :latitude, :longitude
attr_accessible :place_id
validates :place,       presence: true
validates :number,      presence: true
validates :street,      presence: true
validates :locality,    presence: true
validates :postal_code, presence: true, postal_code: { country: :sk }
validates :latitude,    presence: true, numericality: true, allow_nil: true
validates :longitude,   presence: true, numericality: true, allow_nil: true
end

当我加载并保存已存在的地方而没有更改时:

Place.last.save # changed? == false

它自动编辑上的更新

SQL (0.4ms)  UPDATE `places` SET `updated_at` = '2012-11-18 20:38:48' WHERE `places`.`id` = 490

有人对此有经验吗?如何修复它?

使用Rails 3.2.9和MySQL(mysql2适配器)

编辑:

Location.last.save更改为Place.last.save。这是错误的。

railstouch指令可能是松散地按照Unix同名工具的既定和预期行为建模的。

根据文件,它没有坏。

如果它没有做你想让它做的事情,那很可能是错误的方法。


来自RailsAPI:的文档

触摸(name=nil)

保存属性设置为当前的updated_at/on的记录时间请注意,没有执行任何验证,也没有回调执行。如果传递了属性名称,则该属性为与属性上的updated_at/on一起更新。

Linux上触摸的男人描述:

TOUCH(1)

说明将每个FILE的访问和修改时间更新为当前时间。


如果你真的认为这是错误的行为,你可以自由提交补丁或报告错误。

最新更新