Skip to content

Commit

Permalink
Merge pull request #12359 from arthurnn/inverse_on_callbacks
Browse files Browse the repository at this point in the history
Make sure inverse_of is visible on the has_many callbacks
  • Loading branch information
rafaelfranca committed Sep 25, 2013
2 parents e2fd64f + 25ada9b commit d1e3684
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 2 deletions.
6 changes: 5 additions & 1 deletion activerecord/CHANGELOG.md
@@ -1,6 +1,10 @@
* Callbacks on has_many should access the in memory parent if a inverse_of is set.

*arthurnn*

* `ActiveRecord::ConnectionAdapters.string_to_time` respects
string with timezone (e.g. Wed, 04 Sep 2013 20:30:00 JST).

Fixes: #12278

*kennyj*
Expand Down
Expand Up @@ -32,6 +32,7 @@ def handle_dependency

def insert_record(record, validate = true, raise = false)
set_owner_attributes(record)
set_inverse_instance(record)

if raise
record.save!(:validate => validate)
Expand Down
Expand Up @@ -518,6 +518,13 @@ def test_transactions_when_adding_to_new_record
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") }
Expand Down
6 changes: 5 additions & 1 deletion activerecord/test/models/company.rb
Expand Up @@ -39,7 +39,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, -> { order "id DESC" }, :class_name => "Client"
has_many :clients_of_firm, -> { order "id" }, :foreign_key => "client_of", :class_name => "Client"
has_many :clients_of_firm, -> { order "id" }, :foreign_key => "client_of", :class_name => "Client", :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, -> { order "id" }, :foreign_key => "client_of", :class_name => "Client", :dependent => :destroy
Expand Down Expand Up @@ -117,6 +117,10 @@ class Client < Company
has_many :accounts, :through => :firm, :source => :accounts
belongs_to :account

validate do
firm
end

class RaisedOnSave < RuntimeError; end
attr_accessor :raise_on_save
before_save do
Expand Down

0 comments on commit d1e3684

Please sign in to comment.