0
class City<ActiveRecord::Base
  has_one :template, class_name:'TmplLocation'
  after_initialize :_init
  private
  def _init

    self.template = TmplLocation.find(18) if !self.template
  end
end

这就是控制台中发生的事情:

>Loc.first.template
  City Load (29.8ms)  SELECT `locations`.* FROM `locations` WHERE `locations`.`type` IN ('City') LIMIT 1
  TmplLocation Load (0.2ms)  SELECT `locations`.* FROM `locations` WHERE `locations`.`type` IN ('TmplLocation') AND `locations`.`location_id` = 23 LIMIT 1
  TmplLocation Load (34.8ms)  SELECT `locations`.* FROM `locations` WHERE `locations`.`type` IN ('TmplLocation') AND `locations`.`id` = ? LIMIT 1  [["id", 18]]
  SQL (0.2ms)  BEGIN
   (0.7ms)  UPDATE `locations` SET `location_id` = 23, `updated_at` = '2013-06-11 10:47:11' WHERE `locations`.`type` IN ('TmplLocation') AND `locations`.`id` = 18
   (41.4ms)  COMMIT

你看?它更新了TmplLocation,所以现在它一直与这个确切的城市相关联。我只想在这个城市使用TmplLocation实例如何跳过更新阶段?

4

1 回答 1

0

你可以试试这样的

class City<ActiveRecord::Base
  has_one :template, class_name:'TmplLocation', :conditions => { :id => 18 }
end

有关更多选项,请参阅此

guides.rubyonrails.org

于 2013-06-11T11:24:38.510 回答