2010-03-02 13 views
13

¿Cómo se establece una identificación personalizada cuando se utiliza un ayudante check_box_tag en los rieles?Use la identificación personalizada para check_box_tag en Rails

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 averiguar cómo (: id => sr.id no funciona ...).

El problema también podría ser con la forma en que he definido la etiqueta, por lo que si puedo conseguir que la referencia a la casilla correcta sin establecer un ID personalizado a continuación, que estaría bien también ...

+0

Debe volver y aceptar la respuesta a esta pregunta: 3 – Kevin

Respuesta

16

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, que tiene una matriz "curso_ids" => [ "1", " 3 "," 5 "] en lugar de una cadena " curso_ids "=>" 5 ". Si desea devolver un único valor, use vaga [curso_id]; de lo contrario, use vaga [curso_ids] [] para devolver una matriz.

+1

Sólo me ayudó a limpiar un código feo. ¡Gracias! – crftr

+0

Un punto menor: puede eliminar las palabras 'true if' de la cuarta fila, porque el valor de la expresión que las sigue es' true' o 'false', de todos modos. –

3

Think Lo descubrí ...

- 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 hágamelo saber!

11

@Ganesh, en su solución el hash params 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}" 

Aviso se requiere que el tercer parámetro (comprobado) de esto para trabajar La matriz resultante será params

params[:question][:syllabus_reference] = {1, 2, 3, ...} 
+0

que parece una mejor manera, gracias! –

1

Esto fue muy servicial y nos trajeron mi búsqueda días de duración a su fin. La mayor parte de lo que había encontrado hasta ahora contenía sintaxis y parámetros adicionales que los raíles marcaban o ignoraban por completo. Todo lo que quiero hacer es pasar una matriz desde mi vista a mi controlador y usar casillas de verificación para decirle al controlador qué elementos del arreglo procesar. Yo era capaz de reducir la anteriormente aún más, a:

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

donde c viene de mi base de datos:

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

Esto por supuesto pasa una matriz de id de objeto a mi controlador perteneciente sólo a la comprobado entradas (las entradas están desmarcadas de forma predeterminada ya que dejé fuera el : parámetro falso, que por cierto produce el mismo resultado que : verdadero), que es casi todo lo que necesito.

Ahora solo tengo que pasar un indicador de tipo de objeto, incluso solo una cadena literal servirá para que el controlador sepa qué tipo de objeto es procesar sin tener que aumentar mi modelo con una columna adicional.Comenzaré con eso ahora y publicaré mi solución, pero háganme saber si hay una manera rápida y fácil de hacerlo si ya lo saben.

0

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. Todos los parámetros que agregué a la sintaxis que se muestra en mi última publicación anterior (a continuación ??) simplemente provocaron que el estado de la casilla de verificación predeterminada en marcó en lugar de sin marcar, sin pasar ningún dato adicional al controlador.

Mientras permanezco alerta a soluciones alternativas tal como se presentan, por el momento incorporo el tipo de objeto en el valor de submit_tag. Esto vincula la funcionalidad a la pantalla, ya que el valor submit_tag es lo que se muestra al usuario en el botón de envío, pero podría argumentarse que esto fuerza la claridad en la vista incluso cuando proporciona la desambiguación necesaria para el controlador.

El aprendizaje día a día ...

14

Si le das la casilla de verificación un parámetro adicional que va a funcionar:

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

funcionó para mí, ¿qué magia es? –

+1

@arivarasan La definición de función es 'check_box_tag (name, value =" 1 ", checked = false, options = {})', por lo que 'nil' es un marcador de posición para el argumento' checked'; 'true' o' false' también funcionarán, dependiendo de su preferencia. – vol7ron

Cuestiones relacionadas