rails-在更新嵌套属性时将现有记录分配为嵌套关联

时间:2019-10-22 00:40:41

标签: ruby-on-rails activerecord accepts-nested-attributes

我没有使用rails表单,因为这全部来自我正在解析的XML。根据我的要求,我需要将现有记录分配为嵌套关联,同时更新该关联的选定属性。

我的模型如下:

class Listing < ApplicationRecord
  belongs_to :user, inverse_of: :listings
  accepts_nested_attributes_for :user
end

class User < ApplicationRecord
  has_many :listings, inverse_of: :user
  belongs_to :agency, inverse_of: :users
end

class Agency < ApplicationRecord
  has_many :users, inverse_of: :agency
end

现在,要分配现有的用户记录,我的列表参数应为

params = { user_id: 1230 }

要包括用户记录属性更改,我的列表参数应为:

params = { user_attributes: { agency_id: 3453 } }

然后我当然要分配并保存:

listing.assign_attributes(params)
listing.save

仅使用以前的参数不允许我在同一数据库事务中进行agency_id更新;在使用后一个参数时会创建新的用户记录。

我最初的尝试是以某种方式合并两个参数集:

params = { user_attributes: { id: 1230, agency_id: 3453 } }

结果如下:

ActiveRecord::RecordNotFound: Couldn't find User with ID= 1230 for PropertyListing with ID=

旁注:我希望能够支持更新和创建具有相同参数集的动作。

由于无法正常工作,我尝试了另一种混合动力:

params = { user_id: 1230, user_attributes: { agency_id: 3453 } }

但是此用户也创建了一个具有正确agency_id的新用户,而忽略了user_id属性。

在同一ActiveRecord DB请求和参数集中更新同一用户的User.find(1230)时,是否可以分配现有的agency_id

0 个答案:

没有答案