diff --git a/app/forms/hydra_editor/form.rb b/app/forms/hydra_editor/form.rb index b5375fd..8af31eb 100644 --- a/app/forms/hydra_editor/form.rb +++ b/app/forms/hydra_editor/form.rb @@ -56,11 +56,17 @@ def multiple?(field) # ImageForm.model_attributes(params[:image]) # # => { title: 'My new image' } def model_attributes(form_params) - clean_params = sanitize_params(form_params) - terms.each do |key| - clean_params[key].delete('') if clean_params[key] + sanitize_params(form_params).tap do |clean_params| + terms.each do |key| + if clean_params[key] + if multiple?(key) + clean_params[key].delete('') + elsif clean_params[key] == '' + clean_params[key] = nil + end + end + end end - clean_params end def sanitize_params(form_params) diff --git a/spec/forms/hydra_editor_form_spec.rb b/spec/forms/hydra_editor_form_spec.rb index c6b7cf4..8f44e79 100644 --- a/spec/forms/hydra_editor_form_spec.rb +++ b/spec/forms/hydra_editor_form_spec.rb @@ -29,6 +29,11 @@ class TestForm subject { TestForm.model_attributes(params) } it { is_expected.to eq('creator' => 'bob', 'title' => []) } + + describe "setting non-multiple attribute to nil when value is empty string" do + let(:params) { ActionController::Parameters.new(title: [''], creator: '') } + it { is_expected.to eq('creator' => nil, 'title' => []) } + end end end