Используйте пользовательский идентификатор для тега флажка в Rails
Как установить пользовательский идентификатор при использовании помощника check_box_tag в rails?
У меня есть цикл, который создает кучу чекбоксов на основе сбора:
- 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 не работает...).
проблема также может быть в том, как я определил метку, поэтому, если я могу получить ссылку на правильный флажок без установка пользовательского идентификатора, тогда это было бы хорошо...
7 ответов
я использовал это в своем приложении для создания тегов флажков из коллекции и отправки их массива:
<% @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 %>
Итак, в params у меня есть массив "curso_ids"=>["1", "3", "5"] вместо строки "curso_ids"=>"5". Если вы хотите вернуть одно значение, используйте Вага[curso_id], иначе -Вага[curso_ids][] для возврата массива.
Если вы дадите флажку дополнительный параметр, он будет работать:
= check_box_tag 'question[syllabus_reference]', 1, nil, :id => sr.id
@Ganesh, в вашем решении полученный хэш params имеет следующую форму:
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 будет
params[:question][:syllabus_reference] = {1, 2, 3, ...}
думаю, я понял...
- 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
это работает, но если у вас есть лучший способ, дайте мне знать!
Это было очень полезно и принесло мой многодневный Поиск к концу. Большая часть того, что я нашел до сих пор, содержала синтаксис и дополнительные параметры, которые rails либо отмечали, либо полностью игнорировали. Все, что я хочу сделать, это передать массив из моего представления моему контроллеру и использовать флажки, чтобы сообщить контроллеру, какие элементы массива обрабатывать. Я смог свести вышесказанное еще дальше, к:
<%= check_box_tag "c[]", c.id %>
где c происходит из моей базы данных:
<%= @objects.each do |c| %>
Это конечно проходит массив идентификаторов объектов для моего контроллера, относящихся только к проверенным записям (записи не отмечены по умолчанию, так как я оставил :false параметр, который, кстати, дает тот же результат, что и : true), которая составляет почти все, что мне нужно.
теперь мне просто нужно передать индикатор типа объекта - даже просто литеральная строка будет хорошо-так что контроллер знает, какой тип объекта он должен обрабатывать без необходимости увеличения моей модели с дополнительной колонкой. Я начну с этого сейчас и опубликую свое решение, но, пожалуйста, дайте мне знать, если есть быстрый и простой способ сделать это, если вы уже знаете.
Лейто,
чтобы закрыть цикл, я отказался от попытки передать индикатор типа объекта через check_box_tag. Каждый параметр, который я добавил к синтаксису, показанному в моем последнем сообщении выше (ниже??) просто вызвал состояние флажка по умолчанию проверил, а не unchecked, без передачи каких-либо дополнительных данных контроллеру.
оставаясь бдительными к альтернативным решениям, поскольку они представляют себя, на время будучи я включаю тип объекта в submit_tag значение. Это связывает функциональность с дисплеем, так как submit_tag значение-это то, что показано пользователю на кнопке submit, но можно утверждать, что это заставляет ясность в представлении, даже если это обеспечивает необходимую двусмысленность контроллеру.
день за днем...
образец HAML
допустим, у вас есть print
объект где-то с framed
атрибут, вы должны отобразить список prints
таким образом, внутри цикла вы создадите пользовательский row
и column
с уникальным идентификатором каждого checkbox
обновление framed
.input.row.collapse
= check_box_tag :framed, print.framed, nil, { id: "framed_#{print.id}" }