diff --git a/app/controllers/concerns/translatable.rb b/app/controllers/concerns/translatable.rb index 5c3b1be62..21dab63f3 100644 --- a/app/controllers/concerns/translatable.rb +++ b/app/controllers/concerns/translatable.rb @@ -8,12 +8,15 @@ module Translatable private def translation_params(params) - resource_model.globalize_attribute_names.select { |k, v| params.include?(k.to_sym) && params[k].present? } + resource_model + .globalize_attribute_names + .select { |k| params[k].present? || + resource_model.translated_locales.include?(get_locale_from_attribute(k)) } end def delete_translations - locales = resource_model.globalize_locales. - select { |k, v| params[:delete_translations].include?(k.to_sym) && params[:delete_translations][k] == "1" } + locales = resource_model.translated_locales + .select { |l| params.dig(:delete_translations, l) == "1" } locales.each do |l| Globalize.with_locale(l) do resource.translation.destroy @@ -21,4 +24,8 @@ module Translatable end end + def get_locale_from_attribute(attribute_name) + locales = resource_model.globalize_locales + attribute_name.to_s.match(/(#{locales.join('|')})\Z/)&.captures&.first + end end diff --git a/spec/features/translations_spec.rb b/spec/features/translations_spec.rb index 4ff482ee4..4ac85bc4d 100644 --- a/spec/features/translations_spec.rb +++ b/spec/features/translations_spec.rb @@ -71,6 +71,18 @@ feature "Translations" do expect(page).not_to have_link "EspaƱol" end + scenario 'Change value of a translated field to blank' do + milestone.update_attributes!(status: create(:budget_investment_status)) + visit @edit_milestone_url + + fill_in 'budget_investment_milestone_description_en', with: '' + + click_button "Update milestone" + expect(page).to have_content "Milestone updated successfully" + + expect(milestone.reload.description).to be_blank + end + context "Globalize javascript interface" do scenario "Highlight current locale", :js do