Unify hm:t#create and create! implementation

This commit is contained in:
Pratik Naik 2009-08-10 21:02:06 +01:00
parent f97dae5ebe
commit d9c4087a9e

@ -8,25 +8,11 @@ class HasManyThroughAssociation < HasManyAssociation #:nodoc:
alias_method :new, :build
def create!(attrs = nil)
ensure_owner_is_not_new
transaction do
self << (object = attrs ? @reflection.klass.send(:with_scope, :create => attrs) { @reflection.create_association! } : @reflection.create_association!)
object
end
create_record(attrs, true)
end
def create(attrs = nil)
ensure_owner_is_not_new
transaction do
object = attrs ? @reflection.klass.send(:with_scope, :create => attrs) { @reflection.create_association } : @reflection.create_association
raise_on_type_mismatch(object)
add_record_to_target_with_callbacks(object) do |r|
insert_record(object, false)
end
object
end
create_record(attrs, false)
end
def destroy(*records)
@ -44,8 +30,18 @@ def size
return @target.size if loaded?
return count
end
protected
def create_record(attrs, force = true)
ensure_owner_is_not_new
transaction do
object = attrs ? @reflection.klass.send(:with_scope, :create => attrs) { @reflection.create_association } : @reflection.create_association
add_record_to_target_with_callbacks(object) {|r| insert_record(object, force) }
object
end
end
def target_reflection_has_associated_record?
if @reflection.through_reflection.macro == :belongs_to && @owner[@reflection.through_reflection.primary_key_name].blank?
false