Используйте пользовательский идентификатор для тега флажка в 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}" }