Ignore required attribute when conditional validations are present. Closes #250
This commit is contained in:
parent
b424f771f2
commit
bd43bca15b
|
@ -1,5 +1,8 @@
|
|||
== master
|
||||
|
||||
* enhancements
|
||||
* ignore required attribute when conditional validations are present
|
||||
|
||||
* bug fix
|
||||
* Do not use required='required' when browser validations are turned off
|
||||
* Sanitize HMTL attributes in error and hint helpers when options are present
|
||||
|
|
|
@ -66,7 +66,9 @@ module SimpleForm
|
|||
if !options[:required].nil?
|
||||
options[:required]
|
||||
elsif has_validators?
|
||||
(attribute_validators + reflection_validators).any? { |v| v.kind == :presence }
|
||||
(attribute_validators + reflection_validators).any? do |v|
|
||||
v.kind == :presence && !conditional_validators?(v)
|
||||
end
|
||||
else
|
||||
attribute_required_by_default?
|
||||
end
|
||||
|
@ -93,6 +95,10 @@ module SimpleForm
|
|||
reflection ? object.class.validators_on(reflection.name) : []
|
||||
end
|
||||
|
||||
def conditional_validators?(validator)
|
||||
validator.options.include?(:if) || validator.options.include?(:unless)
|
||||
end
|
||||
|
||||
def attribute_required_by_default?
|
||||
SimpleForm.required_by_default
|
||||
end
|
||||
|
|
|
@ -338,6 +338,20 @@ class FormBuilderTest < ActionView::TestCase
|
|||
assert_select 'input.optional#user_name'
|
||||
end
|
||||
|
||||
test 'builder input should not be required when ActiveModel::Validations is included and if option is present' do
|
||||
with_form_for @validating_user, :age
|
||||
assert_no_select 'input.required'
|
||||
assert_no_select 'input[required]'
|
||||
assert_select 'input.optional#validating_user_age'
|
||||
end
|
||||
|
||||
test 'builder input should not be required when ActiveModel::Validations is included and unless option is present' do
|
||||
with_form_for @validating_user, :amount
|
||||
assert_no_select 'input.required'
|
||||
assert_no_select 'input[required]'
|
||||
assert_select 'input.optional#validating_user_amount'
|
||||
end
|
||||
|
||||
# WRAPPERS
|
||||
test 'builder support wrapping around an specific tag' do
|
||||
swap SimpleForm, :wrapper_tag => :p do
|
||||
|
|
|
@ -127,6 +127,8 @@ class ValidatingUser < User
|
|||
include ActiveModel::Validations
|
||||
validates :name, :presence => true
|
||||
validates :company, :presence => true
|
||||
validates :age, :presence => true, :if => Proc.new { |user| user.name }
|
||||
validates :amount, :presence => true, :unless => Proc.new { |user| user.age }
|
||||
validates_numericality_of :age,
|
||||
:greater_than_or_equal_to => 18,
|
||||
:less_than_or_equal_to => 99,
|
||||
|
|
Loading…
Reference in New Issue