Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Hides the add link when object reaches maximum number of nested objec…

…ts as defined in length validation.
  • Loading branch information...
commit e5953b8b7d959a73c2f1c809ee6d366c7f03879e 1 parent 89953fa
@SebastianEdwards authored
View
12 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();
});
View
10 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 = '<div class="fields">'.html_safe
+ output = "<div class=\"fields #{object.class.name.underscore.pluralize}\">".html_safe
output << super
output.safe_concat('</div>')
output

1 comment on commit e5953b8

@amnesia7

I assume the equivalent for minimum would be more or less the same code but reversed for minimum rather than maximum.

Please sign in to comment.
Something went wrong with that request. Please try again.