diff --git a/lib/generators/nested_form/templates/jquery_nested_form.js b/lib/generators/nested_form/templates/jquery_nested_form.js index 669fabf9..59c9d197 100644 --- a/lib/generators/nested_form/templates/jquery_nested_form.js +++ b/lib/generators/nested_form/templates/jquery_nested_form.js @@ -35,6 +35,7 @@ jQuery(function($) { content = content.replace(regexp, "new_" + new_id); var field = $(content).insertBefore(this); + check_maximum(); $(this).closest("form").trigger({type: 'nested:fieldAdded', field: field}); return false; }); @@ -45,7 +46,18 @@ jQuery(function($) { hidden_field.value = '1'; } $(this).closest('.fields').hide(); + check_maximum(); $(this).closest("form").trigger('nested:fieldRemoved'); return false; }); + + function check_maximum() { + $('form a.add_nested_fields').each(function(){ + var assoc = $(this).attr('data-association'); // Name of child + var maximum = $(this).attr('data-maximum'); // Maximum # of children + $('.' + assoc+':visible').length >= maximum ? $(this).hide() : $(this).show(); + }); + } + + check_maximum(); }); diff --git a/lib/nested_form/builder.rb b/lib/nested_form/builder.rb index 52b9c4ee..f3a541f9 100644 --- a/lib/nested_form/builder.rb +++ b/lib/nested_form/builder.rb @@ -16,6 +16,14 @@ def link_to_add(*args, &block) association = args.pop options[:class] = [options[:class], "add_nested_fields"].compact.join(" ") options["data-association"] = association + validators = self.object.class.validators_on(association) + unless validators.empty? + length_validator = validators.select {|item| item.class == ActiveModel::Validations::LengthValidator}.first + unless length_validator.nil? + maximum = length_validator.options[:maximum] + options["data-maximum"] = maximum + end + end args << (options.delete(:href) || "javascript:void(0)") args << options @fields ||= {} @@ -57,7 +65,7 @@ def fields_for_with_nested_attributes(association_name, args, block) end def fields_for_nested_model(name, object, options, block) - output = '
'.html_safe + output = "
".html_safe output << super output.safe_concat('
') output