在单个请求中更正REST-ful方式来创建/更新同一资源的多个对象

时间:2014-09-23 16:31:35

标签: ruby-on-rails rest

我有iOS应用程序对抗Rails应用程序。让我们说我有TeamMember模型,在iOS应用程序中,我需要使用单个请求创建/更新多个团队成员(以事务方式 - 如果出现问题,所有应该保存或完全失败)。

示例:发送POST / team_members与body:

是否可以
[
    {
        "name": "Tom"
    },
    {
        "name": "Derek"
    }
    ...
]

令我困惑的是,我的理论JSON示例包含数组而不是单记录哈希,这在发布POST / team_member的单个团队成员记录时很常见。 PUT / team_members请求也是如此。

我会非常感谢能够向我解释如何以可靠的方式完成此任务的任何人?

2 个答案:

答案 0 :(得分:0)

我认为这应该是可能的,但您的服务合同必须根据数组进行定义。

您的服务将确定它是否有效,并应将其作为交易处理。

答案 1 :(得分:0)

的routes.rb

resources :team_member_batches

控制器

class TeamMemberBatchesController < ApplicationController

    def create
        t = TeamMemberBatch.new(team_member_attributes: JSON.parse(params[:team_member_attributes]))
        if t.save
          # All good
        else
          # Something went wrong...
        end
    end
end

模型(确实不是模型,但确定)

class TeamMemberBatch

  attr_accessor :team_members

  def initialize(atts)
    self.team_members = []

    atts.each do |team_member_attributes|
      self.team_members << TeamMember.new(team_member_attributes)
    end
  end

  def save
    unless team_members.all.map(&:valid?).uniq.include?(false)
       team_members.all.map(&:save)
       true
    end

    false
  end
end