提交 2171e0a1 编写于 作者: E Eloy Duran

Cleanup some code in nested_attributes.rb, autosave_association.rb, and...

Cleanup some code in nested_attributes.rb, autosave_association.rb, and associations.rb with AssociationReflection#collection_association?

Also cache the result value.
上级 f82adc7c
......@@ -1770,7 +1770,7 @@ def construct_finder_sql_for_association_limiting(options, join_dependency)
end
def using_limitable_reflections?(reflections)
reflections.reject { |r| [ :belongs_to, :has_one ].include?(r.macro) }.length.zero?
reflections.collect(&:collection_association?).length.zero?
end
def column_aliases(join_dependency)
......@@ -1843,7 +1843,7 @@ def remove_duplicate_results!(base, records, associations)
case associations
when Symbol, String
reflection = base.reflections[associations]
if reflection && [:has_many, :has_and_belongs_to_many].include?(reflection.macro)
if reflection && reflection.collection_association?
records.each { |record| record.send(reflection.name).target.uniq! }
end
when Array
......@@ -1853,12 +1853,11 @@ def remove_duplicate_results!(base, records, associations)
when Hash
associations.keys.each do |name|
reflection = base.reflections[name]
is_collection = [:has_many, :has_and_belongs_to_many].include?(reflection.macro)
parent_records = []
records.each do |record|
if descendant = record.send(reflection.name)
if is_collection
if reflection.collection_association?
parent_records.concat descendant.target.uniq
else
parent_records << descendant
......
......@@ -167,8 +167,7 @@ def add_autosave_association_callbacks(reflection)
validation_method = "validate_associated_records_for_#{reflection.name}"
force_validation = (reflection.options[:validate] == true || reflection.options[:autosave] == true)
case reflection.macro
when :has_many, :has_and_belongs_to_many
if reflection.collection_association?
unless method_defined?(save_method)
before_save :before_save_collection_association
......
......@@ -235,16 +235,10 @@ def accepts_nested_attributes_for(*attr_names)
attr_names.each do |association_name|
if reflection = reflect_on_association(association_name)
type = case reflection.macro
when :has_one, :belongs_to
:one_to_one
when :has_many, :has_and_belongs_to_many
:collection
end
reflection.options[:autosave] = true
add_autosave_association_callbacks(reflection)
nested_attributes_options[association_name.to_sym] = options
type = (reflection.collection_association? ? :collection : :one_to_one)
# def pirate_attributes=(attributes)
# assign_nested_attributes_for_one_to_one_association(:pirate, attributes)
......
......@@ -256,7 +256,10 @@ def polymorphic_inverse_of(associated_class)
# association. Returns +true+ if the +macro+ is one of +has_many+ or
# +has_and_belongs_to_many+, +false+ otherwise.
def collection_association?
[:has_many, :has_and_belongs_to_many].include?(macro)
if @collection_association.nil?
@collection_association = [:has_many, :has_and_belongs_to_many].include?(macro)
end
@collection_association
end
private
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册