mirror of https://github.com/rails/rails
4f191b9754
The background --- Configuration for replacing a collection was introduced in [rails/rails#36716][]. However, since [rails/rails#42596][] has been merged, Rails 7.1 and beyond will default to _replacing_ an Active Storage `has_many_attached` relationship, as opposed to _appending to it_. The problem --- With replacement as the established precedent, it's currently a challenge to replace an existing collection with an empty one. The solution --- This commit makes two changes. The first is to Action View and its form building helpers. The change draws inspiration from how an `<input type="checkbox">` field (or collection of fields) is paired with an `<input type="hidden">` field to represent the unchecked value. The change pairs any `<input type="file" multiple="multiple">` elements with an `<input type="hidden">` element to represent an empty collection. Like the [check_box][] form builder method, the `file_field` method accepts an `include_hidden:` option to skip the creation of the hidden element. The second is to how Active Storage generates attribute assignment methods through `has_many_attached`. With the possibility of an `<input type="file">` field being paired with an `<input type="hidden" value="">` field, the backing models need to be able to coerce an "empty-ish" value into an empty list. For example: ```ruby @user.highlights = [""] @user.highlights # => [] ``` When combined, these changes enable consumer applications to submit "empty" collections to blank out existing attachments. Support is configured through the `config.active_storage.multiple_file_field_include_hidden` configuration value, which defaults to `false`. [check_box]: https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-check_box [rails/rails#36716]: https://github.com/rails/rails/pull/36716 [rails/rails#42596]: https://github.com/rails/rails/pull/42596 |
||
---|---|---|
.. | ||
analyzer | ||
controllers | ||
database | ||
dummy | ||
fixtures | ||
jobs | ||
models | ||
previewer | ||
service | ||
template | ||
urls | ||
direct_upload_token_test.rb | ||
engine_test.rb | ||
fixture_set_test.rb | ||
javascript_package_test.rb | ||
migrations_test.rb | ||
test_helper.rb |