text_field tag select_tag rails multiple form ruby-on-rails checkbox form-helpers

ruby on rails - select_tag - Use ID personalizado para check_box_tag en Rails



rails select_tag (6)

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

Observe que se requiere el tercer parámetro (marcado) para que esto funcione. El conjunto de parámetros resultante será

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

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

Tengo un bucle que crea un conjunto de casillas de verificación basadas en 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 una identificación personalizada para que mi Etiqueta para la casilla de verificación funcione correctamente, pero no puedo entender 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 haga referencia a la casilla de verificación correcta sin establecer un ID personalizado, eso también estaría bien ...


Creo que 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 tienes una mejor manera házmelo saber!


Esto fue muy útil y llevó a término mi búsqueda de días. La mayor parte de lo que había encontrado hasta ahora contenía sintaxis y parámetros adicionales que los rieles 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. Pude reducir lo anterior 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, transfiere una matriz de identificadores de objetos a mi controlador pertenecientes únicamente a las entradas comprobadas (las entradas se desactivan por defecto ya que dejé fuera el parámetro : false , que por cierto produce el mismo resultado que : verdadero ), que es casi todo Necesito.

Ahora solo necesito pasar un indicador de tipo de objeto, incluso una cadena literal funcionará bien, para que el controlador sepa qué tipo de objeto es procesar sin que tenga 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.


Leito,

Solo para cerrar el ciclo, dejé de intentar pasar un indicador de tipo de objeto a través de check_box_tag . Cada parámetro que agregué a la sintaxis que se muestra en mi última publicación anterior (¿más abajo?) Simplemente provocó que el estado de la casilla de verificación sea seleccionado por defecto en lugar de desmarcado , sin pasar ningún dato adicional al controlador.

Mientras permanezco alerta a las soluciones alternativas a medida que se presentan, por el momento incorporo el tipo de objeto en el valor submit_tag . Esto vincula la funcionalidad a la pantalla, ya que el valor de submit_tag es el 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.

Aprendiendo día a día ...


Si le da a la casilla de verificación un parámetro adicional, funcionará:

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


Utilicé esto en mi aplicación para crear etiquetas de casilla de verificación de la colección y enviar una matriz de ellas:

<% @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 %>

Entonces en params, tengo una matriz "curso_ids" => ["1", "3", "5"] en lugar de una cadena "curso_ids" => "5" . Si desea devolver un solo valor, use vaga [curso_id] ; de lo contrario, use vaga [curso_ids] [] para devolver una matriz.