when the value is a string it responds to length but not to all? (or any other Enumerable methods) thus the all? check (essentially, checking that it's an enumerable, be it an array or a has_many relation) can instead do a homage of both, something like this:
```ruby
if value.is_a?(Enumerable)
  value.reject{|i| i.respond_to?(:marked_for_destruction?) && i.marked_for_destruction?}
else
  value.length
end
```

to the performance question - yes, this will probably affect performance a bit, as we're adding an iteration on an Enumerable object.