Использовать собственный идентификатор для 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 - это то, что показано пользователю в кнопке отправки, но можно утверждать, что это заставляет ясность в представлении, даже если оно обеспечивает необходимое устранение контроллер.

Обучение день за днем ​​...