Использовать собственный идентификатор для check_box_tag в Rails
Как установить пользовательский идентификатор при использовании хелпера check_box_tag в рельсах?
У меня есть цикл, который создает кучу флажков на основе коллекции:
- subject.syllabus_references.each do |sr|
= check_box_tag 'question[syllabus_reference]', sr.id, :id => sr.id
= label_tag sr.id, sr.name
Я хотел бы установить пользовательский идентификатор, чтобы моя метка для флажка работала правильно, но я не могу понять, как (: id = > sr.id не работает...).
Проблема также может быть связана с тем, как я определил метку, поэтому, если я могу получить это, чтобы ссылаться на правильный флажок без установки пользовательского идентификатора, тогда это будет хорошо...
Ответы
Ответ 1
Я использовал это в своем приложении для создания тегов флажка из коллекции и отправки массива из них:
<% @cursos.each do |c| %>
<span class='select_curso'>
<%= check_box_tag "vaga[curso_ids][]",
c.id, (checked = true if form.object.curso_ids.include?(c.id)) %>
<%= label_tag "vaga[curso_ids][][#{c.id}]", c.nome %>
</span>
<% end %>
Итак, в параметрах у меня есть массив "curso_ids" = > [ "1", "3", "5" ] вместо строки "curso_ids" = > "5" . Если вы хотите вернуть одно значение, используйте vaga [curso_id], в противном случае используйте vaga [curso_ids] [], чтобы вернуть массив.
Ответ 2
Если вы установите флажок дополнительного параметра, он будет работать:
= check_box_tag 'question[syllabus_reference]', 1, nil, :id => sr.id
Ответ 3
@Ganesh, в вашем решении результирующий параметр hash имеет следующий вид:
params[:question][:syllabus_reference] = {1 => 1, 2 => 2, 3 => 3, ...}
Они должны работать лучше для вас:
check_box_tag "question[syllabus_reference][]", sr.id, checked, {:id => "question_syllabus_reference_#{sr.id}"
Обратите внимание, что для этого требуется третий параметр (отмечен). Получившийся массив параметров будет
params[:question][:syllabus_reference] = {1, 2, 3, ...}
Ответ 4
Думаю, я понял это...
- subject.syllabus_references.each do |sr|
= check_box_tag "question[syllabus_reference][#{sr.id}]", sr.id
= label_tag "question[syllabus_reference][#{sr.id}]", sr.name
Это работает, но если у вас есть лучший способ, дайте мне знать!
Ответ 5
Это было очень полезно, и мой дневной поиск закончился. Большая часть того, что я нашел до сих пор, содержит синтаксис и дополнительные параметры, которые рельсы либо помечены, либо вообще проигнорированы. Все, что я хочу сделать, это передать массив из моего представления в мой контроллер и использовать флажки, чтобы сообщить контроллеру, какие элементы массива обрабатываются. Я смог еще больше уменьшить это, чтобы:
<%= check_box_tag "c[]", c.id %>
где c - из моей базы данных:
<%= @objects.each do |c| %>
Это, конечно, передает массив идентификаторов объектов моему контроллеру, относящийся только к отмеченным записям (записи не отмечены по умолчанию, так как я не учитывал параметр : false, который, кстати, дает то же самое результат как : true), что почти все, что мне нужно.
Теперь мне просто нужно передать индикатор типа объекта - даже буквальная строка будет делать красиво - так, чтобы контроллер знал, какой тип объекта он должен обрабатывать без моего увеличения моей модели с дополнительным столбцом. Я начну с этого и отправлю свое решение, но, пожалуйста, сообщите мне, если есть быстрый и простой способ сделать это, если вы уже знаете.
Ответ 6
Leito,
Просто, чтобы закрыть цикл, я отказался от попыток передать индикатор типа объекта через check_box_tag. Каждый параметр, который я добавил к синтаксису, указанному в моем последнем сообщении выше (ниже??), просто заставляет по умолчанию использовать флажок отмечен, а не не отмечен, не передавая никаких дополнительных данных к контроллеру.
Оставаясь в готовности к альтернативным решениям, поскольку они представляют себя, я пока что включаю тип объекта в значение submit_tag. Это связывает функциональность с дисплеем, так как значение submit_tag - это то, что показано пользователю в кнопке отправки, но можно утверждать, что это заставляет ясность в представлении, даже если оно обеспечивает необходимое устранение контроллер.
Обучение день за днем ...