我在Rails关联中遇到严重的touch指令问题。
始终编辑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
自动编辑updated_at
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。这是错误的。
答案 0 :(得分:1)
rails touch
指令很可能在同名Unix工具的已建立和预期行为之后松散地建模。
根据文件记载,它没有被打破。
如果它没有做你想做的事情,那可能是错误的做法。
触摸(名称=无)
使用设置为当前的updated_at / on属性保存记录 时间。请注意,未执行验证且没有回调 执行。如果传递属性名称,则该属性为 与updated_at / on属性一起更新。
关于Linux的触摸的男人描述:
:触摸(1)强>
描述 将每个FILE的访问和修改时间更新为当前时间。
如果您认为这是错误的行为,您可以自由提交补丁或报告错误。