Utilice ID personalizado para check_box_tag en Rails
-
23-09-2019 - |
Pregunta
¿Cómo se establece un ID personalizado cuando se utiliza un ayudante check_box_tag en los carriles?
Tengo un bucle que crea un grupo de casillas de verificación sobre la base de una colección:
- subject.syllabus_references.each do |sr|
= check_box_tag 'question[syllabus_reference]', sr.id, :id => sr.id
= label_tag sr.id, sr.name
Me gustaría establecer un identificador personalizado, de modo que mi etiqueta de la casilla de verificación funciona correctamente, pero me parece que no puede encontrar la manera (: id => sr.id no funciona ...).
El problema también podría ser con la forma en que he definido de la etiqueta, lo que si puedo conseguir que hacer referencia a la casilla correcta sin establecer un ID personalizado a continuación, que estaría bien también ...
Solución
He utilizado este en mi solicitud para crear etiquetas de casilla de verificación de la colección y presentar una gran variedad de ellos:
<% @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 %>
Así que en params, tengo una array "curso_ids" => [ "1", "3", "5"] lugar de una cadena "curso_ids" => "5 ". Si desea devolver un solo valor, el uso vaga [curso_id] , de lo contrario usar vaga [curso_ids] [] para devolver una matriz.
Otros consejos
Si le das a la casilla de verificación un parámetro adicional que va a funcionar:
= check_box_tag 'question[syllabus_reference]', 1, nil, :id => sr.id
@Ganesh, en la solución de la params hash resultante tiene la siguiente forma:
params[:question][:syllabus_reference] = {1 => 1, 2 => 2, 3 => 3, ...}
Estos deberían funcionar mejor para usted:
check_box_tag "question[syllabus_reference][]", sr.id, checked, {:id => "question_syllabus_reference_#{sr.id}"
Se requiere Aviso el tercer parámetro (comprobado) para que esto funcione. La matriz params resultante será
params[:question][:syllabus_reference] = {1, 2, 3, ...}
Piense lo he descubierto ...
- 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
esto funciona, pero si usted tiene una mejor manera que me haga saber!
Esto fue muy servicial y nos trajeron mi búsqueda días de duración a su fin. La mayor parte de lo que me había encontrado hasta ahora contenida sintaxis y parámetros adicionales que sea carriles marcados o ignoradas por completo. Todo lo que quiero hacer es pasar una matriz de mi vista a mi regulador del uso y casillas de verificación para indicarle al controlador que elementos de la matriz a proceso. Yo era capaz de reducir la anteriormente aún más, a:
<%= check_box_tag "c[]", c.id %>
c donde viene de mi base de datos:
<%= @objects.each do |c| %>
Esto por supuesto pasa una matriz de id de objeto a mi controlador pertenece sólo a las entradas de marcado (las entradas son sin marcar de forma predeterminada desde que me fui a cabo la : false parámetro, que por cierto produce el mismo resultado como . true ), que es casi todo lo que necesito
Ahora sólo hay que pasar en un indicador de tipo de objeto - aunque sólo sea una cadena literal va a hacer muy bien - por lo que el controlador sabe qué tipo de objeto que es mi proceso sin tener que aumentar mi modelo con una columna adicional. Voy a empezar en el que de vez en publicar mi solución, pero por favor, hágamelo saber si hay una manera rápida y fácil de hacer esto si usted ya sabe.
muestra HAML
Digamos que tiene un objeto en algún lugar print
con un atributo framed
, usted tiene que mostrar una lista de por lo prints
dentro del bucle se creará un row
costumbre y column
con id único en cada checkbox
para la actualización framed
.input.row.collapse
= check_box_tag :framed, print.framed, nil, { id: "framed_#{print.id}" }
Leito,
Sólo para cerrar el bucle, me di por vencido tratando de pasar un indicador de tipo de objeto a través de check_box_tag . Cada parámetro I añadido a la sintaxis mostrada en mi último post encima (por debajo ??) causado simplemente el estado casilla de verificación para predeterminado a comprobado en lugar de controla , sin pasar ningún dato adicional al controlador.
Si bien se mantiene alerta a soluciones alternativas tal como se presentan, por el momento incorporo el tipo de objeto en el valor submit_tag. Esto se relaciona la funcionalidad de la pantalla, ya que el submit_tag valor es lo que se muestra al usuario en el botón de envío, pero se podría argumentar que esta claridad fuerzas a la vista, incluso, ya que proporciona desambiguación necesaria para la controlador.
Aprendizaje día a día ...