added an alias for new to build to the AR collection proxy, this corrects an issue where the collection proxies were not consistent
This commit is contained in:
parent
1f34a79373
commit
eb7ef2ccd6
@ -56,6 +56,8 @@ def initialize(association)
|
||||
Array.wrap(association.options[:extend]).each { |ext| proxy_extend(ext) }
|
||||
end
|
||||
|
||||
alias_method :new, :build
|
||||
|
||||
def respond_to?(*args)
|
||||
super ||
|
||||
(load_target && target.respond_to?(*args)) ||
|
||||
@ -115,14 +117,6 @@ def reload
|
||||
@association.reload
|
||||
self
|
||||
end
|
||||
|
||||
def new(*args, &block)
|
||||
if @association.is_a?(HasManyThroughAssociation)
|
||||
@association.build(*args, &block)
|
||||
else
|
||||
method_missing(:new, *args, &block)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -6,8 +6,6 @@ module Associations
|
||||
class HasManyThroughAssociation < HasManyAssociation #:nodoc:
|
||||
include ThroughAssociation
|
||||
|
||||
alias_method :new, :build
|
||||
|
||||
# Returns the size of the collection by executing a SELECT COUNT(*) query if the collection hasn't been
|
||||
# loaded and calling collection.size if it has. If it's more likely than not that the collection does
|
||||
# have a size larger than zero, and you need to fetch that collection afterwards, it'll take one fewer
|
||||
|
@ -245,6 +245,21 @@ def test_build
|
||||
assert_equal Developer.find(1).projects.sort_by(&:id).last, proj # prove join table is updated
|
||||
end
|
||||
|
||||
def test_new_aliased_to_build
|
||||
devel = Developer.find(1)
|
||||
proj = assert_no_queries { devel.projects.new("name" => "Projekt") }
|
||||
assert !devel.projects.loaded?
|
||||
|
||||
assert_equal devel.projects.last, proj
|
||||
assert devel.projects.loaded?
|
||||
|
||||
assert !proj.persisted?
|
||||
devel.save
|
||||
assert proj.persisted?
|
||||
assert_equal devel.projects.last, proj
|
||||
assert_equal Developer.find(1).projects.sort_by(&:id).last, proj # prove join table is updated
|
||||
end
|
||||
|
||||
def test_build_by_new_record
|
||||
devel = Developer.new(:name => "Marcel", :salary => 75000)
|
||||
devel.projects.build(:name => "Make bed")
|
||||
|
@ -537,6 +537,16 @@ def test_adding_a_collection
|
||||
assert_equal 3, companies(:first_firm).clients_of_firm(true).size
|
||||
end
|
||||
|
||||
def test_new_aliased_to_build
|
||||
company = companies(:first_firm)
|
||||
new_client = assert_no_queries { company.clients_of_firm.new("name" => "Another Client") }
|
||||
assert !company.clients_of_firm.loaded?
|
||||
|
||||
assert_equal "Another Client", new_client.name
|
||||
assert !new_client.persisted?
|
||||
assert_equal new_client, company.clients_of_firm.last
|
||||
end
|
||||
|
||||
def test_build
|
||||
company = companies(:first_firm)
|
||||
new_client = assert_no_queries { company.clients_of_firm.build("name" => "Another Client") }
|
||||
|
Loading…
Reference in New Issue
Block a user