Как использовать options_from_collection_for_select в сочетании с ActiveAdmin - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу выбрать идентификатор из раскрывающегося списка, в котором отображаются параметры идентификатора - имя из таблицы учетной записи.

<% f.input :account_id, :as => :select, :collection => options_from_collection_for_select(Account.all, 'id', 'name'), :label=> 'ID' %>

Когда я нажимаю на текстовое поле, я надеюсь увидеть такие параметры, как 1 - Джонс 2 - Джинс 3 - Смит и др. c .. но с текущим кодом это будут только Джонс, Джинс, Смит и др. c. Как я могу настроить text_method? Спасибо

1 Ответ

0 голосов
/ 27 февраля 2020

options_from_collection_for_select возвращает строку тегов параметров, которые были скомпилированы путем итерации по коллекции и назначения результата вызова value_method в качестве значения параметра и text_method в качестве текста параметра.

options_from_collection_for_select(Account.all, 'id', 'name')

Означает, что вы просматриваете все записи учетной записи и называете account.id как value_method и account.name как text_method для каждой записи. Вы не можете использовать этот помощник для архивации того, что вы хотите, потому что ожидаемая опция выбора включает в себя индексный номер, а также

options_for_select удовлетворяет ваши потребности лучше. Замените options_from_collection_for_select(...) деталь на приведенный ниже код

options_for_select(Account.all.each_with_index{ |acc, index| [acc.id, "#{index+1} - #{acc.name}"] })

ПРИМЕЧАНИЕ:

  1. Вы должны переместить Account.all.each_with_index{ |acc, index| [acc.id, "#{index+1} - #{acc.name}"] } в вспомогательный метод
  2. Также вы можете установить выбранное значение селектора, передав id в качестве второго параметра options_for_select()

ОБНОВЛЕНИЕ:

Если номер префикса является идентификатором записи, тогда можно использовать options_from_collection_for_select. Вам просто нужно объявить метод экземпляра внутри модели Account, как показано ниже:

def name_with_id_prefix
  "#{id} - #{name}"
end

Затем в представлении вызовите новый метод вместо 'name'

options_from_collection_for_select(Account.all, 'id', 'name_with_id_prefix')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...