Удаление одного перевода из модели в проекте Rails с использованием Mobility

Я перевожу проект Rails с Globalize на Mobility. Благодаря Globalize я получил доступ к текущему переводу через translation метод:

feature.translation

Я использовал это в основном при управлении переводами для модели, чтобы удалить конкретный перевод:

feature.translation.destroy

С Globalize для каждого объекта я получаю список переводов и создаю кнопку удаления для каждого:

<%= link_to 'x', admin_feature_path(list_item, translation_locale: l), method: :delete, data: { confirm: %(Are you sure you want to delete this #{humanize_locale l} translation? This cannot be undone.) } %>

Я использую локаль, переданную по ссылке, чтобы удалить соответствующий перевод:

Mobility.with_locale(translation_locale) do
  @feature.tranlsation.destroy
end

Есть ли прямой способ удаления одного перевода из модели с несколькими переводами?

1 ответ

Решение

Здесь нет ничего особенного в мобильности. У вас есть модель с ассоциацией translationsкаждый translation имеет locale,

Таким образом, чтобы уничтожить перевод, вы можете просто найти его и уничтожить:

translation = feature.translations.find { |t| t.locale == Mobility.locale.to_s }
translation.destroy

Если вам нужен такой метод, как у Globalize, просто добавьте его в свою модель:

def translation
  translations.find { |t| t.locale == Mobility.locale.to_s }
end

Это оно!

Другие вопросы по тегам