如何在ActiveRecord事务中的回调中设置has_many关联的属性

时间:2016-08-09 14:59:58

标签: ruby-on-rails activerecord

我有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

0 个答案:

没有答案