我有2个型号。
class Location < ActiveRecord::Base
has_many :rooms
before_save :update_lat_lng
def update_lat_lng
self.rooms.update_all(latitude: self.latitude, longitude: self.longitude)
end
end
class Rooms < ActiveRecord::Base
belongs_to :location
end
位置模型具有before_save
回调,用于更新与位置实例关联的会议室。
通过这种方式,我更新房间属性之前我实际保存了位置。这样可能会导致位置无法写入数据库,但会将房间写入数据库。
我想将更改包装在单个ActiveRecord事务中。如果每个位置仅has_one
个房间,则可以使用
def update_lat_lng
self.room.latitude = self.latitude
self.room.longitude = self.longitude
end
但是对于一个很多人来说,我还在摸不着头脑。我扯掉了以下无济于事。
def update_lat_lng
self.rooms.each do |food|
self.room.latitude = self.latitude
self.room.longitude = self.longitude
end
end