ruby 更新Rails API中的嵌套模型

aiqt4smr  于 2022-11-04  发布在  Ruby
关注(0)|答案(2)|浏览(96)

我想构建一个在数据库中创建嵌套记录的Rails API。
我想要将数据发布到数据库中,用于nested或者使用has_ many关联来关联模型[参见下面的代码]。

**这是正确的方法吗?**或者对于update操作是否有其他方法?我想记录用户Address,它将以json格式出现在散列数组中。

我有两个模型UserAddress。关联是User有_许多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
mftmpeh8

mftmpeh81#

这不是正确的方法,您应该使用accepts_nested_attributes_for

Class User 
  has_many :addresses
  accepts_nested_attributes_for :addresses
end

有关更多详细信息和示例follow this

8zzbczxx

8zzbczxx2#

我想明白了,并为那些陷入困境的人写下了答案。
由于我没有使用强参数,并且只需要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

相关问题