Используйте пользовательский идентификатор для check_box_tag в Rails - PullRequest
16 голосов
/ 02 марта 2010

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

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

Ответы [ 7 ]

18 голосов
/ 02 марта 2010

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

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

17 голосов
/ 05 июня 2013

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

= check_box_tag 'question[syllabus_reference]', 1, nil, :id => sr.id
11 голосов
/ 01 июня 2011

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

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, ...}
3 голосов
/ 02 марта 2010

Думаю, я понял это ...

- 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

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

1 голос
/ 10 июля 2018

образец ХАМЛ

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

.input.row.collapse
  = check_box_tag :framed, print.framed, nil, { id: "framed_#{print.id}" }
1 голос
/ 28 января 2012

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

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

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

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

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

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

0 голосов
/ 28 января 2012

Leito,

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

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

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

...