Unify hm:t#create and create! implementation
This commit is contained in:
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
|
||||
|
Loading…
Reference in New Issue
Block a user