我没有使用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
?