【问题标题】:Update nested models in rails api更新 rails api 中的嵌套模型
【发布时间】:2017-11-09 05:50:37
【问题描述】:

我想构建一个 Rails API 来在数据库中创建嵌套记录。

我想为 nested 将数据发布到数据库中,或者说具有 has_ many 关联的关联模型 [参见下面的代码]。

这是正确的方法吗? 或者update 操作是否有任何替代方法?我想记录用户Address,这将是json格式的哈希数组。

我有两个型号UserAddress。 关联是User has_many Addresses

我的更新操作:

   def update
    @user = User.find(id: params[:id])

    if @user.update(first_name: params[:first_name],email: params[:email],phone: params[:phone],password: Time.now.to_i, gstin: params[:gstin],addresses)
      @user.addresses.each do |a|

        a.update_attributes(first_name: params['first_name'],last_name: params['last_name'],city: params['city'],state: params['state'],phone: params['phone'],zip: params['zip'],address: params['address'])
      end  
      render json: @user, status: 200
    else
      render json: { errors: @user.errors }, status: 422
    end
  end

【问题讨论】:

  • 你能公开你的 JSON 吗?不需要将用户的属性存储在 Address 对象中
  • 其实 first_name,last_name 也是地址的属性 .my json 数据在创建用户时传入参数中。但地址以 json 格式出现。地址:[{“first_name”:“syed”,“last_name”:“shahid”,“state”:“Karnataka”,“city”:“Banglore”,“address”:“xyz 和asdf asdf asdf", "zip": "563101", "phone": "8880076601" }]

标签: ruby-on-rails json ruby api


【解决方案1】:

这不是正确的做法 你应该使用accepts_nested_attributes_for

Class User 
  has_many :addresses
  accepts_nested_attributes_for :addresses
end

更多细节和例子follow this

【讨论】:

  • 兄弟,我已经添加了accepts_nested_attributes_for :addresses,同时为用户构建创建操作。我想更新动作?
  • 兄弟,您可以使用与创建时相同的方式进行更新,只需执行user.update(user_params),您需要根据strong parameter中的模型属性修改您的params
【解决方案2】:

我想通了,并为陷入困境的人写了答案。因为我没有使用强参数,我只需要 json 格式的地址。我解析了地址 json

def update
    @user = User.find(params[:id])
    if @user.update(first_name: params[:first_name],email: params[:email],phone: params[:phone], gstin: params[:gstin])
      updated_addreses = JSON.parse(params[:addresses])
        updated_addreses.each do |add|
          @user.addresses.update(first_name: add['first_name'],city: add['city'],state: add['state'],phone: add['phone'],zip: add['zip'],address: add['address'])
        end  
      render json: {user_id: @user.id.to_s}, status: 200
    else
      render json: { errors: @user.errors }, status: 422
    end
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多