Используйте собственный идентификатор для check_box_tag в Rails

StackOverflow https://stackoverflow.com/questions/2360465

Вопрос

Как установить собственный идентификатор при использовании помощника 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 не работает...).

Проблема также может быть в том, как я определил метку, поэтому, если я смогу заставить ее ссылаться на правильный флажок, не устанавливая собственный идентификатор, тогда это тоже будет хорошо...

Это было полезно?

Решение

Я использовал это в своем приложении для создания тегов флажков из коллекции и отправки их массива:

<% @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".Если вы хотите вернуть одно значение, используйте вага[curso_id], в противном случае используйте вага[curso_ids][] чтобы вернуть массив.

Другие советы

Если вы дадите флажку дополнительный параметр, он будет работать:

= check_box_tag 'question[syllabus_reference]', 1, nil, :id => sr.id

@Ganesh, в вашем решении полученный хэш параметров имеет следующую форму:

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, ...}

Кажется, я понял это...

- 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

Это работает, но если у вас есть способ получше, дайте мне знать!

Это было очень полезно и положило конец моим многодневным поискам.Большая часть того, что я нашел до сих пор, содержала синтаксис и дополнительные параметры, которые рельсы либо помечали, либо вообще игнорировали.Все, что я хочу сделать, это передать массив из моего представления в мой контроллер и использовать флажки, чтобы сообщить контроллеру, какие элементы массива обрабатывать.Я смог еще больше сократить вышеизложенное:

<%= check_box_tag "c[]", c.id %>

где c взят из моей базы данных:

<%= @objects.each do |c| %>

Это, конечно, передает массив идентификаторов объектов моему контроллеру, относящемуся только к отмеченным записям (по умолчанию записи не отмечены, так как я пропустил :ЛОЖЬ параметр, который, кстати, дает тот же результат, что и :истинный), который почти все, что мне нужно.

Теперь мне просто нужно передать индикатор типа объекта (подойдет даже простая строка), чтобы контроллер знал, какой тип объекта он должен обрабатывать, и мне не пришлось дополнять мою модель дополнительным столбцом.Я начну с этого сейчас и опубликую свое решение, но, пожалуйста, дайте мне знать, есть ли быстрый и простой способ сделать это, если вы уже знаете.

Образец HAML

Допустим, у вас есть print объект где-то с framed атрибут, вам необходимо отобразить список prints поэтому внутри цикла вы создадите собственный row и column с уникальным идентификатором на каждом checkbox для обновления framed

.input.row.collapse
  = check_box_tag :framed, print.framed, nil, { id: "framed_#{print.id}" }

Лейто,

Чтобы замкнуть цикл, я отказался от попытки передать индикатор типа объекта через check_box_tag.Каждый параметр, который я добавлял в синтаксис, показанный в моем последнем посте выше (ниже??), просто приводил к тому, что состояние флажка по умолчанию было установлено на проверено скорее, чем непроверенный, без передачи каких-либо дополнительных данных контроллеру.

Оставаясь внимательным к альтернативным решениям по мере их появления, на данный момент я включаю тип объекта в submit_tag ценить.Это связывает функциональность с дисплеем, поскольку submit_tag Значение — это то, что отображается пользователю на кнопке отправки, но можно утверждать, что это вносит ясность в представление, даже если обеспечивает необходимое устранение неоднозначности для контроллера.

Учимся день за днём...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top