diff --git a/app/helpers/translatable_form_helper.rb b/app/helpers/translatable_form_helper.rb index 0e3df3885..7795cbc12 100644 --- a/app/helpers/translatable_form_helper.rb +++ b/app/helpers/translatable_form_helper.rb @@ -22,7 +22,7 @@ module TranslatableFormHelper def translatable_fields(&block) @object.globalize_locales.map do |locale| Globalize.with_locale(locale) do - fields_for(:translations, @object.translations.where(locale: locale).first_or_initialize, builder: TranslationsFieldsBuilder) do |translations_form| + fields_for(:translations, translation_for(locale), builder: TranslationsFieldsBuilder) do |translations_form| @template.concat translations_form.hidden_field( :_destroy, value: !@template.enable_locale?(@object, locale), @@ -37,6 +37,19 @@ module TranslatableFormHelper end.join.html_safe end + def translation_for(locale) + existing_translation_for(locale) || new_translation_for(locale) + end + + def existing_translation_for(locale) + # Use `select` because `where` uses the database and so ignores + # the `params` sent by the browser + @object.translations.select { |translation| translation.locale == locale }.first + end + + def new_translation_for(locale) + @object.translations.new(locale: locale) + end end class TranslationsFieldsBuilder < FoundationRailsHelper::FormBuilder diff --git a/spec/shared/features/translatable.rb b/spec/shared/features/translatable.rb index d5907cbba..81deb8640 100644 --- a/spec/shared/features/translatable.rb +++ b/spec/shared/features/translatable.rb @@ -95,7 +95,9 @@ shared_examples "translatable" do |factory_name, path_name, fields| expect(page).to have_css "#error_explanation" - # TODO: check the field is now blank. + click_link "EspaƱol" + + expect(page).to have_field(field_for(field, :es), with: "") end scenario "Remove a translation", :js do