2

我没有使用 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属性。

有没有办法User.find(1230)在更新同agency_id一个 ActiveRecord DB 请求和参数集中的同一个用户时分配现有的?

4

0 回答 0