Search for validations on both association and attribute (association_id) when testing for attribute required

This commit is contained in:
Carlos Antonio da Silva 2010-08-06 14:52:19 -03:00
parent ff77beefe0
commit ed261854da
4 changed files with 19 additions and 2 deletions

View File

@ -56,12 +56,20 @@ module SimpleForm
if options.key?(:required)
options[:required]
elsif object.class.respond_to?(:validators_on)
object.class.validators_on(attribute_name).any? { |v| v.kind == :presence }
(attribute_validators + reflection_validators).any? { |v| v.kind == :presence }
else
attribute_required_by_default?
end
end
def attribute_validators
object.class.validators_on(attribute_name)
end
def reflection_validators
reflection ? object.class.validators_on(reflection.name) : []
end
def attribute_required_by_default?
SimpleForm.required_by_default
end

View File

@ -429,6 +429,13 @@ class FormBuilderTest < ActionView::TestCase
assert_equal 3, calls
end
test 'builder association mark input as required based both association and attribute' do
swap SimpleForm, :required_by_default => false do
with_association_for @validating_user, :company, :collection => []
assert_select 'label.required'
end
end
# ASSOCIATIONS - BELONGS TO
test 'builder creates a select for belongs_to associations' do
with_association_for @user, :company

View File

@ -107,4 +107,5 @@ end
class ValidatingUser < User
include ActiveModel::Validations
validates :name, :presence => true
validates :company, :presence => true
end

View File

@ -59,7 +59,8 @@ class ActionView::TestCase
:id => 1,
:name => 'New in Simple Form!',
:description => 'Hello!',
:created_at => Time.now
:created_at => Time.now,
:company => 1
}.merge(options))
end