我没有使用 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 请求和参数集中的同一个用户时分配现有的?