mirror of
https://github.com/github/rails.git
synced 2026-01-09 14:48:08 -05:00
Merge pull request #12359 from arthurnn/inverse_on_callbacks
Make sure inverse_of is visible on the has_many callbacks Conflicts: activerecord/CHANGELOG.md activerecord/test/models/company.rb
This commit is contained in:
@@ -1,4 +1,9 @@
|
||||
## unreleased ##
|
||||
|
||||
* Callbacks on has_many should access the in memory parent if a inverse_of is set.
|
||||
|
||||
*arthurnn*
|
||||
|
||||
* Fix `FinderMethods#last` unscoped primary key.
|
||||
|
||||
Fixes #11917.
|
||||
|
||||
@@ -9,6 +9,7 @@ module ActiveRecord
|
||||
|
||||
def insert_record(record, validate = true, raise = false)
|
||||
set_owner_attributes(record)
|
||||
set_inverse_instance(record)
|
||||
|
||||
if raise
|
||||
record.save!(:validate => validate)
|
||||
|
||||
@@ -653,6 +653,13 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_inverse_on_before_validate
|
||||
firm = companies(:first_firm)
|
||||
assert_queries(1) do
|
||||
firm.clients_of_firm << Client.new("name" => "Natural Company")
|
||||
end
|
||||
end
|
||||
|
||||
def test_new_aliased_to_build
|
||||
company = companies(:first_firm)
|
||||
new_client = assert_no_queries { company.clients_of_firm.new("name" => "Another Client") }
|
||||
|
||||
@@ -44,7 +44,7 @@ class Firm < Company
|
||||
has_many :unsorted_clients, :class_name => "Client"
|
||||
has_many :unsorted_clients_with_symbol, :class_name => :Client
|
||||
has_many :clients_sorted_desc, :class_name => "Client", :order => "id DESC"
|
||||
has_many :clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id"
|
||||
has_many :clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :inverse_of => :firm
|
||||
has_many :clients_ordered_by_name, :order => "name", :class_name => "Client"
|
||||
has_many :unvalidated_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :validate => false
|
||||
has_many :dependent_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :destroy
|
||||
@@ -126,6 +126,10 @@ class Client < Company
|
||||
has_many :accounts, :through => :firm
|
||||
belongs_to :account
|
||||
|
||||
validate do
|
||||
firm
|
||||
end
|
||||
|
||||
class RaisedOnSave < RuntimeError; end
|
||||
attr_accessor :raise_on_save
|
||||
before_save do
|
||||
|
||||
Reference in New Issue
Block a user