module PaperTrailAssociationTracking::Reifiers::BelongsTo
Reify a single `belongs_to` association of `model`. @api private
Public Class Methods
reify(assoc, model, options, transaction_id)
click to toggle source
@api private
# File lib/paper_trail_association_tracking/reifiers/belongs_to.rb, line 10 def reify(assoc, model, options, transaction_id) id = model.send(assoc.foreign_key) klass = assoc.polymorphic? ? model.send(assoc.foreign_type).constantize : assoc.klass version = load_version(klass, id, transaction_id, options[:version_at]) record = load_record(klass, id, options, version) model.send("#{assoc.name}=".to_sym, record) end
Private Class Methods
load_record(assoc_klass, id, options, version)
click to toggle source
Given a `belongs_to` association and a `version`, return a record that can be assigned in order to reify that association. @api private
# File lib/paper_trail_association_tracking/reifiers/belongs_to.rb, line 24 def load_record(assoc_klass, id, options, version) if version.nil? assoc_klass.where(assoc_klass.primary_key => id).first else version.reify( options.merge( has_many: false, has_one: false, belongs_to: false, has_and_belongs_to_many: false ) ) end end
load_version(assoc_klass, id, transaction_id, version_at)
click to toggle source
Given a `belongs_to` association and an `id`, return a version record from the point in time identified by `transaction_id` or `version_at`. @api private
# File lib/paper_trail_association_tracking/reifiers/belongs_to.rb, line 42 def load_version(assoc_klass, id, transaction_id, version_at) assoc_klass.paper_trail.version_class. where("item_type = ?", assoc_klass.base_class.name). where("item_id = ?", id). where("created_at >= ? OR transaction_id = ?", version_at, transaction_id). order("id").limit(1).first end