Я не использую форму рельсов, поскольку все это происходит из 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=
Sidenote: Я хотел бы иметь возможность поддерживать как обновление, так и создание действий с одинаковым набором параметров.
Поскольку это не сработало, я попробовал другой гибрид:
params = { user_id: 1230, user_attributes: { agency_id: 3453 } }
Но этот также создал нового пользователя с правильным agency_id
, игнорируя атрибут user_id
.
Есть ли способ назначить существующий User.find(1230)
при обновлении того же пользователя agency_id
втот же запрос ActiveRecord DB и набор параметров?