Jquery ajax crea múltiples objetos en una sola llamada ajax (a Rails)

Quiero crear objetos personales en mi aplicación de Rails mediante una llamada jja jja ajax. Está bien para una llamada a la creación de un objeto. Lo que me gustaría es pasar una serie de nombres y crear varios objetos en un viaje.

¿Algunas ideas?

Gracias

Hay dos etapas para esto: la primera no está relacionada con ajax y es básicamente “cómo debo hacer una acción del controlador para crear / actualizar varios objetos a la vez”. Esta ha sido una pregunta común desde la invención de los Rails, y la gente la ha tratado de varias maneras (“actualización múltiple de Rails de google”). Una vez que tenga esta acción del controlador, podría llamarlo desde una forma normal o desde una solicitud ajax, en realidad no es un problema.

Por lo tanto, solo necesitamos una acción de controlador que obtenga algunos nombres y los haga usuarios. Lo haría flexible, y lo tendría para que los datos se almacenen en una matriz en params [: users], cada entrada en la matriz es un hash de parámetros (así como params [: user] en una creación / actualización regular llamada)

#needs to be added to your routes as a :post action def multiple_create @users = [] @failed = [] params[:users].each do |user_hash| user = User.new(user_hash) if user.save @users << user else @failed << user end end end 

Ahora, esto esperará que los parámetros tengan este formulario (si lo envías a través de nombres, por ejemplo):

params: {:users => [{:name => "Alice"}, {:name => "Bob"}]}

Ahora solo necesita adaptar los datos en su consulta ajax en consecuencia. No sé de dónde provienen los datos, ya que no da detalles de la página en su pregunta, pero podría ser algo como esto (asummos que hay un montón de entradas para los nombres que tienen la clase "newUserName") :

 //build the array var users = new Array(); $(".newUserName").each(function(){ var user = {"name": $(this).val()}; users.push(user); }); //make the request jQuery.ajax({ async:true, type: "POST", url: ("/users/multiple_create/"), data: {"users": users}, dataType: "script" }); 

Aunque, acabo de probar esto y mientras el objeto javascript en los usuarios se ve así:

[{name:"alice "}, {name:"bob "}, {name:"charlie"}]

, los parámetros que realmente envía a través de este aspecto:

{"users"=>{"0"=>{"name"=>"alice "}, "1"=>{"name"=>"bob "}, "2"=>{"name"=>"charlie"}}}

Por lo tanto, parece que jquery no quiere enviar la matriz como parámetro y, en cambio, la convierte en un hash, con claves únicas en forma de 0,1,2, etc. para distinguir entre los diferentes hashes. De todos modos, esta es una mejor manera de construir los parámetros para ser honestos, ya que hace que sea menos fácil mezclarlos de forma regular. Podemos hacer frente a esto modificando la acción del controlador de la siguiente manera:

 if params[:users].is_a?(Hash) @user_hashes = params[:users].values else @user_hashes = params[:users] end @user_hashes.each do |user_hash| ... 

No estoy familiarizado con ruby-on-rails, pero ¿qué hay de esta manera?

Recorriendo la matriz y creando pares clave-valor. La clave es, digamos, ‘nombre’, extendida por el índice, y el valor es el nombre de las personas. Asegúrese de enviar los datos con el método de publicación, para que tenga suficiente espacio para enviar un gran número de nombres. En el lado del servidor, lea todos los parámetros y cree sus objetos, utilizando un bucle.