Rieles: necesita un formulario de selección múltiple para enviar datos en filas separadas
Frecuentes
Visto 1,090 veces
0
Actualmente tengo lo siguiente funcionando correctamente en mi aplicación:
Forma
<%= f.fields_for :types do |builder| %>
<p>
<%= builder.select(:name, [['Type A', 'Type A'],
['Type B', 'Type B'],
['Type C', 'Type C'],
['Type D', 'Type D'],
['Type E', 'Type E']
],{ :prompt => "Please select"},
{ :multiple => true, :size => 5 }
) %>
</p>
% end %>
Regulador
def new
@task = Task.new
1.times { @task.types.build }
end
Tipo de modelo
class Type < ActiveRecord::Base
belongs_to :task
accepts_nested_attributes_for :task
attr_accessible :name, :task_attributes
end
Modelo de tarea
class Task < ActiveRecord::Base
has_many :types, :dependent => :destroy
accepts_nested_attributes_for :types
attr_accessible :types_attributes
end
Mi problema es que cuando se envía la información, toda va a la misma fila y al campo "nombre" en la tabla de tipos; lo necesito para crear filas separadas en la tabla de tipos.
necesito esta solucion http://forums.phpfreaks.com/topic/195729-multiple-select-drop-down-data-saved-to-mysql-how/ pero para rieles
Puedo obtener filas separadas creadas usando campos de texto con el siguiente código:
Forma
<%= f.fields_for :types do |builder| %>
<p>
<%= builder.label :name, "Type Name" %><br />
<%= builder.text_field :name %>
<%= builder.check_box :_destroy %>
<%= builder.label :_destroy, "Remove Chore" %>
</p>
<% end %>
Regulador
def new
@task = Task.new
3.times { @task.types.build }
end
Cualquier ayuda sería apreciada.
1 Respuestas
0
Aquí hay un ejemplo de un proyecto mío:
class Manuscript < ActiveRecord::Base
has_many :readerships
has_many :editors, :through => :readerships
end
class Readership < ActiveRecord::Base
belongs_to :manuscript
belongs_to :editor
end
class Editor < ActiveRecord::Base
end
= form_for resource do |form|
= form.collection_select :editor_ids, available_editors, :id, :name, {}, {:multiple => true, :size => 2}
Aquí está el HTML de la colección_select anterior:
<input name="manuscript[editor_ids][]" type="hidden" value="">
<select id="manuscript_editor_ids" multiple="multiple" name="manuscript[editor_ids][]" size="2">
<option value="3">Dr. Bob Johnson</option>
<option selected="selected" value="4">John Salamandro</option>
<option selected="selected" value="1">Erasmus Bielowicz</option>
</select>
respondido 28 nov., 13:14
David. Creo que me estoy acercando. Establecí una relación HMT: tengo una tarea (que es como su manuscrito), tengo un tipo (que es como su número de lectores), tengo un color (que es como su editor), cuando coloco esto en el Formulario de tareas <%= form_for :types do |form| %> <%= form.collection_select :color_ids, description, :id, :name, {}, {:multiple => true, :size => 2} %> <% end %> -- Recibo este mensaje de error sin definir variable local o 'descripción' del método. También me pregunto dónde se colocará la información. ¿Va a la tabla de tipos? - user1648020
Debería agregar el modelo de color: 'descripción' contiene los nombres de los colores. user1648020
Creo que necesitas usar :color_ids, :id, :description. El: nombre solo significa 'llame a este método en el modelo para obtener el texto de la opción'. - Davidfurber
Si coloco esto en el formulario de tareas: Rojo Azul Verde -- el formulario se envía -- pero los datos no se registran en la base de datos -- supongo que no sabe a dónde ir --- Necesito que vaya a la tabla Tipo y lo que necesito es que se registre task_id y color_id como una fila separada según la cantidad de elementos seleccionados -- - user1648020
Entonces, ¿los colores pertenecen a la tarea o al tipo? ¿Y el parámetro attr_accessible o strong está configurado correctamente? - Davidfurber
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails ruby-on-rails-3 forms or haz tu propia pregunta.
Sin conocer las asociaciones de sus modelos, supongo que desea campos_para: tipos en lugar de: Tipo - davidfurber
Lo anterior fue un error tipográfico (que ahora he modificado anteriormente) pero desafortunadamente, sigue siendo el mismo problema, envía los datos (lo cual es bueno) a la tabla "tipo" sin problema, pero todos los datos se ingresan la celda 'nombre' para una fila --- Necesito filas separadas con cada fila solo tiene una entrada en el campo de nombre --- esto funciona perfectamente si uso campos de texto individuales --- - user1648020
¡Do! El problema básico es que no puede lograr lo que desea utilizando campos y atributos anidados. Intente eliminar eso y hacer que la colección seleccione ir a type_ids. - davidfurber
Sigo sin obtener el resultado esperado. Eliminé lo que dijiste y probé conjuntos de colección, y aunque puedo hacer que aparezca el menú desplegable y enviarlo, ahora no se envía nada a la base de datos. - user1648020
No estoy seguro si estoy haciendo la selección de colección correcta. ¿Puede darme un ejemplo de mi controlador de tareas y vista? Pensé que tenía que usar atributos anidados o el formulario de tareas no se enviaría al modelo de tipo. user1648020