Skip to content

calling form.validate throws error stack level too deep #94

@kmsheng

Description

@kmsheng

This error occurs when using collection and Disposable::Twin::Parent together
For example

require "reform"
require "reform/rails"
require "disposable"
require "disposable/twin/parent"

class SampleForm < Reform::Form
  feature Disposable::Twin::Parent
  property :name
  validates :name, presence: true

  collection :tags, virtual: true, default: [], populator: :populate_tags! do
      property :name
      validates :name, presence: true

      validate :validate_form_name

      def validate_form_name
        if name == parent.name
          errors.add(:name, "tag name duplicates")
        end
      end
    end

   def populate_tags!(fragment:, **)
      existed_tag = tags.find { |tag| tag.name == fragment[:name] }
      return existed_tag if existed_tag
      tags.append(OpenStruct.new(name: fragment[:name]))
   end
end

form = SampleForm.new
form.save(tags: [ { name: "" } ]) 
form.errors.full_messages # SystemStackError: stack level too deep is thrown right here

Any clues would be truly appreciated, thank you

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions