From e69d68cab92679bdd923830f6cc048cb5b09c526 Mon Sep 17 00:00:00 2001 From: lyfeyaj Date: Wed, 26 Feb 2014 09:24:51 +0800 Subject: [PATCH] fix bugs and change alias to alias_method --- lib/paper_trail/has_paper_trail.rb | 6 +++--- lib/paper_trail/version_concern.rb | 15 ++++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/paper_trail/has_paper_trail.rb b/lib/paper_trail/has_paper_trail.rb index e5e224a2..9a041a09 100644 --- a/lib/paper_trail/has_paper_trail.rb +++ b/lib/paper_trail/has_paper_trail.rb @@ -223,11 +223,11 @@ module PaperTrail # Utility method for reifying. Anything executed inside the block will appear like a new record def appear_as_new_record instance_eval { - alias :old_new_record? :new_record? - alias :new_record? :present? + alias_method :old_new_record?, :new_record? + alias_method :new_record?, :present? } yield - instance_eval { alias :new_record? :old_new_record? } + instance_eval { alias_method :new_record?, :old_new_record? } end # Mimicks behavior of `touch` method from `ActiveRecord::Persistence`, but generates a version diff --git a/lib/paper_trail/version_concern.rb b/lib/paper_trail/version_concern.rb index be8bece6..aca6e8be 100644 --- a/lib/paper_trail/version_concern.rb +++ b/lib/paper_trail/version_concern.rb @@ -215,9 +215,9 @@ module PaperTrail version_table_name = model.class.paper_trail_version_class.table_name model.class.reflect_on_all_associations(:has_one).each do |assoc| version = model.class.paper_trail_version_class.joins(:version_associations). - where(:item_type => assoc.class_name). - where(:foreign_key_name => assoc.foreign_key). - where(:foreign_key_id => model.id). + where("version_associations.foreign_key_name = ?", assoc.foreign_key). + where("version_associations.foreign_key_id = ?", model.id). + where("#{version_table_name}.item_type = ?", assoc.class_name). where("created_at >= ? OR transaction_id = ?", options[:version_at], transaction_id). order("#{version_table_name}.id ASC").first if version @@ -230,7 +230,7 @@ module PaperTrail child = version.reify options logger.info "Reify #{child}" model.appear_as_new_record do - model.send(model.send "#{assoc.name}=", child) + model.send "#{assoc.name}=", child end end end @@ -245,16 +245,17 @@ module PaperTrail next if assoc.name == model.class.versions_association_name version_id_subquery = PaperTrail::VersionAssociation.joins(model.class.version_association_name). select("MIN(version_id)"). - where("#{version_table_name}.item_type = ?", assoc.class_name). where(:foreign_key_name => assoc.foreign_key). where(:foreign_key_id => model.id). + where("#{version_table_name}.item_type = ?", assoc.class_name). where("created_at >= ? OR transaction_id = ?", options[:version_at], transaction_id). group("item_id").to_sql - versions = model.class.where("id IN (#{version_id_subquery})") + versions = model.class.paper_trail_version_class.where("id IN (#{version_id_subquery})") # Pass true to force the model to load collection = Array.new model.send(assoc.name, true) + # Iterate all the child records to replace them with the previous values versions.each do |version| if version.event == 'create' if child = version.item @@ -266,7 +267,7 @@ module PaperTrail end end - model.send assoc.name, collection + model.send "#{assoc.name}=", collection end end