2011-10-13 8 views
5

¿Cómo acepto una matriz de objetos JSON en el sitio de mis raíles? Publiqué algo comoRieles: cómo aceptar una matriz de objetos JSON

{'team':{'name':'Titans'}} 

Sin embargo, si trato de publicar un JSON con una matriz de objetos. Solo guarda el primer objeto.

{'team':[{'name':'Titans'},{'name':'Dragons'},{'name':'Falcons'}]} 

Mi objetivo es enviar varios "equipos" en 1 archivo JSON. ¿Qué tengo que escribir en el lado de Rails?

Por el lado de los carriles, tengo algo así como

def create 
    @team = Team.new(params[:team]) 
    @team.user_id = current_user.id 

    respond_to do |format| 
    if @team.save 
     format.html { redirect_to(@team, :notice => 'Team was successfully created.') } 
     format.json { render :json => @team, :status => :created, :location => @team } 
    else 
     format.html { render :action => "new" } 
     format.json { render :json => @team.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

Cómo tomo los params: y para cada elemento, crear un nuevo equipo o algo así? Soy nuevo en ruby ​​por lo que cualquier ayuda sería apreciada.

Respuesta

2

Déjame Asumo que publique

{'team':[{'name':'Titans'},{'name':'Dragons'},{'name':'Falcons'}]} 

A continuación, sus parametros serán

"team" => {"0"=>{"chapter_name"=>"Titans"}, "1"=>{"chapter_name"=>"Dragons"}, "2"=>{"chapter_name"=>"Falcons"}} 

Mi idea es

def create 
    #insert user id in all team 
    params[:team].each_value { |team_attributes| team_attributes.store("user_id",current_user.id) } 
    #create instance for all team 
    teams = params[:team].collect {|key,team_attributes| Team.new(team_attributes) } 
    all_team_valid = true 
    teams.each_with_index do |team,index| 
    unless team.valid? 
     all_team_valid = false 
     invalid_team = teams[index] 
    end 
    end 

    if all_team_valid 
    @teams = [] 
    teams.each do |team| 
     team.save 
     @teams << team 
    end 
    format.html { redirect_to(@teams, :notice => 'Teams was successfully created.') } 
    format.json { render :json => @teams, :status => :created, :location => @teams } 
    else 
    format.html { render :action => "new" } 
    format.json { render :json => invalid_team.errors, :status => :unprocessable_entity } 
    end 

end 
+2

Si desea cualquiera de guardar todos los equipos o ninguno debe envolver los resguardos dentro de una transacción (suponiendo que su DB apoye las transacciones, por supuesto) http://api.rubyonrails.org/classes/ActiveRecord/Transactions /ClassMethods.html –

+0

en realidad, todavía no conozco las transacciones. Gracias por presentar una guía tan útil sobre las transacciones. –

Cuestiones relacionadas