Friendly_id и globalize — использовать перевод по умолчанию для slug, если перевод отсутствует

Я интегрировал гем friendly_id и globalize, и он отлично работает, если у меня есть перевод для slug в определенной локали.

Но чего я хочу добиться, так это использовать перевод по умолчанию для slug, если он отсутствует в таблице перевода для какой-либо локали.

Итак, скажем, у меня есть мастер-локаль MA, где слаг заполнен, и у меня есть локаль EN, где он отсутствует. Если я перейду на EN-версию, я хочу увидеть MA-версию слага.

Есть ли способ, как это сделать?

Спасибо, Мирослав


person Miroslav    schedule 06.09.2015    source источник


Ответы (2)


Наконец, я понял это, написав вспомогательный метод приложения (другие решения у меня не работали). Надеюсь, это поможет кому-то. Если для продукта не существует переводов, будет использоваться основной перевод (который создается по умолчанию при создании продукта), в противном случае используется текущая версия языкового стандарта.

# application_helper.rb

def product_url(product)
    if product.translations.pluck(:locale).include?(I18n.locale.to_s)
      admin_translations_product_path(product)
    else
      I18n.with_locale(:ma) { admin_translations_product_path(product) }
    end
end

# index.html.erb
<%= link_to "#{t :button_admin_edit} #{locale.to_s.upcase}", product_url(product) %>
person Miroslav    schedule 06.09.2015

Я считаю, что это будет сделано за вас, если вы используете этот дополнительный драгоценный камень для дружественного идентификатора и глобализации: https://github.com/norman/friendly_id-globalize/blob/master/README.md

Он обрабатывает локаль по умолчанию. Я просто отсылаю вас к документам, но, надеюсь, это поможет.

person Tom Fast    schedule 06.09.2015
comment
Спасибо, Том. Я просмотрел документацию и пробовал много способов, но ни один из них не работал у меня. Он отлично работает для загрузки переводов по умолчанию для текстов, если они не существуют на текущем языке, но не для URL-адресов продуктов. Наконец, я сделал это с помощью вспомогательного метода, и он отлично работает (но, возможно, есть более элегантное решение). - person Miroslav; 06.09.2015