Получение Globalize и автозаполнение для совместной работы - PullRequest
0 голосов
/ 08 мая 2019

Используя globalize gem для управления переводами с автозаполнением, возникает ситуация, когда необходимо правильно установить количество хуков. Примечание: это не использует hstore AFAIK. Мне не удалось найти способ сделать это. Наиболее производительная установка на сегодняшний день имеет Контроллер: * +1001 *

autocomplete :nation, :name, :full => true

Nation

translates :name 

вид

<%= autocomplete_field_tag 'nation_name', '', autocomplete_nation_name_itins_path, size: 35, :id_element => 'nation_id' %>

Пока нет внутренней ссылки на таблицу базы данных nation_translations, созданную Globalize. Как видно из этого изображения, существует проблема:

enter image description here

Проблема 1: входные данные остаются привязанными к значению атрибута базовой таблицы (я еще не очистил их, как предполагает самоцвет Globalize. В противном случае я бы получил пропуски). can фактически готов все значения can в основной таблице ... Ввод в других локалях, например, на кириллице, скажем, Канада, естественно, не имеет никакого эффекта, так как это значение не является частью таблицы Nation.

Что интересно, так это то, что раскрывающиеся значения заполняются Rails автоматически, извлекая значения перевода того, что вводится.

Проблема 2: Я бы лучше передал параметр 'nation_id', который, естественно, является частью таблицы nation_translations, с данными формы. хотя я могу добавить , :extra_data => [:nation_id] к контроллеру, он не передается (например, на кириллице, где ввод дается без автозаполнения)

{"utf8"=>"✓", "nation_name"=>"Канада", "commit"=>"..."}

Rails.logger.info :extra_data возвращает:

extra_data

Теперь вторая проблема может быть преодолена, потому что запрос типа

Nation::Translation.where('name = ?', "Канада").pluck('nation_id')

возвращает правильный результат. Но этот момент спорный, если автозаполнение не играет в мяч с вводом пользователя.

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

1 Ответ

0 голосов
/ 09 мая 2019

это действительно решается созданием совершенно нового класса с атрибутами nation_id, name, locale и, таким образом, может вызываться символически.

Однако запрос запроса не так прост. Как подсказывает самоцвет, метод нужно настроить

def autocomplete_nation_name
  term = params[:term].downcase
  locale = params[:locale]
  nationtranslations = Nationtranslation.where('locale = ? AND name LIKE ?', locale, "%#{term}%").order(:name).all
  render :json => nationtranslations.map { |nationtranslation| {:id => nationtranslation.id, :label => nationtranslation.name, :value => nationetranslation.name} }
end

вмешательство в сам метод действия обеспечивает всю желаемую свободу действий ...

...