mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Refactored nested attributes a bit around :reject_if => :all_blank.
This commit is contained in:
parent
a323b83acf
commit
1afa9fa5a9
2 changed files with 8 additions and 6 deletions
|
@ -188,6 +188,8 @@ module ActiveRecord
|
|||
# the parent model is saved. This happens inside the transaction initiated
|
||||
# by the parents save method. See ActiveRecord::AutosaveAssociation.
|
||||
module ClassMethods
|
||||
REJECT_ALL_BLANK_PROC = proc { |attributes| attributes.all? { |_, value| value.blank? } }
|
||||
|
||||
# Defines an attributes writer for the specified association(s). If you
|
||||
# are using <tt>attr_protected</tt> or <tt>attr_accessible</tt>, then you
|
||||
# will need to add the attribute writer to the allowed list.
|
||||
|
@ -229,6 +231,7 @@ module ActiveRecord
|
|||
options = { :allow_destroy => false, :update_only => false }
|
||||
options.update(attr_names.extract_options!)
|
||||
options.assert_valid_keys(:allow_destroy, :reject_if, :limit, :update_only)
|
||||
options[:reject_if] = REJECT_ALL_BLANK_PROC if options[:reject_if] == :all_blank
|
||||
|
||||
attr_names.each do |association_name|
|
||||
if reflection = reflect_on_association(association_name)
|
||||
|
@ -241,11 +244,7 @@ module ActiveRecord
|
|||
|
||||
reflection.options[:autosave] = true
|
||||
add_autosave_association_callbacks(reflection)
|
||||
self.nested_attributes_options[association_name.to_sym] = options
|
||||
|
||||
if options[:reject_if] == :all_blank
|
||||
self.nested_attributes_options[association_name.to_sym][:reject_if] = proc { |attributes| attributes.all? {|k,v| v.blank?} }
|
||||
end
|
||||
nested_attributes_options[association_name.to_sym] = options
|
||||
|
||||
# def pirate_attributes=(attributes)
|
||||
# assign_nested_attributes_for_one_to_one_association(:pirate, attributes)
|
||||
|
|
|
@ -34,7 +34,10 @@ class TestNestedAttributesInGeneral < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_should_add_a_proc_to_nested_attributes_options
|
||||
[:parrots, :birds, :birds_with_reject_all_blank].each do |name|
|
||||
assert_equal ActiveRecord::NestedAttributes::ClassMethods::REJECT_ALL_BLANK_PROC,
|
||||
Pirate.nested_attributes_options[:birds_with_reject_all_blank][:reject_if]
|
||||
|
||||
[:parrots, :birds].each do |name|
|
||||
assert_instance_of Proc, Pirate.nested_attributes_options[name][:reject_if]
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue