私はgem Reformの新規ユーザーです。私の目標は、という名前のテーブルとshared_filesそれに関連付けられているテーブルの 1 つを更新することshared_files_user_accountsです。Reform が という名前の別の関連付けられたテーブルを更新しようとしていることを除いて、更新は両方で正常に機能すると思いますがuser_accounts、そうしてはいけません。私のプロパティは次のとおりです。
class SharedFileUploadForm < Reform::Form
model :shared_file
property :filename
property :file, virtual: true
collection :user_accounts,
populate_if_empty: lambda {|fragment, _|
user_account= UserAccount.filter(email_address: fragment["email_address"])
} do
property :email_address, validates: { presence: true }
end
validate :only_existing_user_accounts
def only_existing_user_accounts
return if user_accounts.all?(&:persisted?)
errors.add(:user_accounts, "must already exist")
end
end
次に、shared_filesモデルで、次のデータを更新しますshared_files_user_accounts。
def user_accounts=(collection)
shared_file_user_accounts_dataset.delete
add_shared_file_user_account(SharedFileUserAccount.new(shared_file_id: shared_file_id, user_account_id: owner_id))
collection.each do |user_account|
add_shared_file_user_account(SharedFileUserAccount.new(shared_file_id: shared_file_id, user_account_id: user_account.id))
end
end
postgre からのエラー メッセージは次のとおりです。
[ERROR] unicorn worker[0] --port xxxx:yyyy - PG::UniqueViolation:
ERROR: duplicate key value violates unique constraint "user_accounts_email_address_key"
DETAIL: Key (email_address)=(EMAIL@ADDRESS) already exists.: UPDATE "user_accounts" SET ...
どうもありがとうございました!