2011-10-13 76 views
5

如何接受我的Rails站点上的JSON对象数组?我发布类似Rails - 如何接受JSON对象数组

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

但是,如果我尝试发布JSON与对象数组。它只保存第一个对象。

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

我的目标是在1个JSON文件中发送多个“团队”。我必须在Rails方面写什么?

在铁轨边,我有一些像

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 

时候我的PARAMS:对于每个元素,创建一个新的团队还是什么?我是新来的红宝石,所以任何帮助将不胜感激。

回答

2

让我假设你发布

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

然后你PARAMS将

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

我的想法是

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

如果你想要么保存所有团队或没有,你应该换保存在一个事务内部(当然,假设你的数据库支持事务)http://api.rubyonrails.org/classes/ActiveRecord/Transactions /ClassMethods.html –

+0

实际上我不知道有关交易的事情。感谢您介绍有关交易的有用指南。 –