aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/models/owner.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test/models/owner.rb')
-rw-r--r--activerecord/test/models/owner.rb39
1 files changed, 39 insertions, 0 deletions
diff --git a/activerecord/test/models/owner.rb b/activerecord/test/models/owner.rb
new file mode 100644
index 0000000000..5fa50d9918
--- /dev/null
+++ b/activerecord/test/models/owner.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+class Owner < ActiveRecord::Base
+ self.primary_key = :owner_id
+ has_many :pets, -> { order "pets.name desc" }
+ has_many :toys, through: :pets
+ has_many :persons, through: :pets
+
+ belongs_to :last_pet, class_name: "Pet"
+ scope :including_last_pet, -> {
+ select('
+ owners.*, (
+ select p.pet_id from pets p
+ where p.owner_id = owners.owner_id
+ order by p.name desc
+ limit 1
+ ) as last_pet_id
+ ').includes(:last_pet)
+ }
+
+ after_commit :execute_blocks
+
+ accepts_nested_attributes_for :pets, allow_destroy: true
+
+ def blocks
+ @blocks ||= []
+ end
+
+ def on_after_commit(&block)
+ blocks << block
+ end
+
+ def execute_blocks
+ blocks.each do |block|
+ block.call(self)
+ end
+ @blocks = []
+ end
+end