rails has_many minimum collection size update validation

后端 未结 3 1946
闹比i
闹比i 2020-12-25 11:20

I have a has_many association that accepts nested attributes. I need for there to be a minimum of 1 associated object in the collection, so I wrote a custom va

相关标签:
3条回答
  • 2020-12-25 12:06

    SooDesuNe

    Yes, validates :foos, :length => {:minimum => 1, :message=>"At least one foo" } is better than the original one, but the same issue still happens.

    To fix it, we could use validate method:

    validate :validate_foos
    
    private
    def validate_foos
      remaining_foos = foos.reject(&:marked_for_destruction?)
      errors.add :foos, "At least one foo" if remaining_foos.empty?
    

    Hope it helps to who encountered the same problem.

    0 讨论(0)
  • 2020-12-25 12:15

    Create validator:

    class CollectionLengthValidator < ActiveModel::Validations::LengthValidator
      def validate_each(record, attribute, value)
        value = value.respond_to?(:reject) ? value.reject(&:marked_for_destruction?) : value
        super(record, attribute, value)
      end
    end
    

    This is resolve problem with delete last record in collection.

    Then use in model as standard length validator:

    validates :foos, :collection_length => {:minimum => 1}
    
    0 讨论(0)
  • 2020-12-25 12:20

    A better way to validate the minimum size of a collection:

    validates :my_association, :length => { :minimum => Fixnum}
    
    0 讨论(0)
提交回复
热议问题