#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Как мне указать выбранный параметр, если два из этих параметров имеют одинаковый идентификатор? У меня есть эта форма ввода
<%= f.input :receiver_id,
label: "Client",
collection: receivers_keys_and_values,
as: :grouped_select,
group_method: :last %>
и этот метод для создания параметров выбора
def receivers_keys_and_values
[
["Client", Client.all.map { |c| [c.name, c.id] }],
["Program", Program.all.map { |p| [p.name, p.id] }]
]
end
Проблема, с которой я сталкиваюсь, заключается в том, что идентификатор клиента может совпадать с идентификатором программы. Поэтому, когда два идентификатора совпадают, выбранный всегда является программным.
Как я мог бы указать что-то вроде?
selected: ["Client"][id]
or
selected: ["Program"][id]
Ответ №1:
Таким образом, идентификаторы выбранных элементов будут разными для программ и клиентов:
def receivers_keys_and_values
[
["Client", Client.all.map { |c| [c.name, "client_#{c.id}"] }],
["Program", Program.all.map { |p| [p.name, "program_#{p.id}"] }]
]
end
Вам также необходимо будет обновить код обработки формы, чтобы иметь возможность анализировать ввод, например «program_123».
Вы также можете пофантазировать и немного переработать код:
def receivers_keys_and_values
[Client, Program].map do |type|
type.all.map { |entity| [entity.name, dom_id(entity) }
end
end
но я не уверен, что это понятнее (хотя должно привести к тому же результату). Решать вам.