😸

Rails class_name指定をしたbelongs_to関連付けでdestroyが失敗する

2024/08/16に公開
class BankTransaction < ApplicationRecord
  belongs_to :bank
  belongs_to :transaction_type, class_name: 'BankTransactionType', foreign_key: 'transaction_type_id', optional: true
  end

このようなモデル定義をしたレコードをdestroyしようとすると
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column bank_transactions.bank_transaction_type_id does not exist
と言われ失敗。どうやらtransaction_type_idではなくbank_transaction_type_idを指定しようとして存在しないといわれている

原因は、has_many関連付けを持つBankTransactionTypeの方にもforeign_keyが必要なことにあった。
元の定義

class MatterTransactionType < ApplicationRecord  
  has_many :bank_transactions, dependent: :restrict_with_error

修正後

class MatterTransactionType < ApplicationRecord  
  has_many :bank_transactions, dependent: :restrict_with_error, foreign_key: 'transaction_type_id'

これで解決された


References

https://stackoverflow.com/questions/25144803/dependent-destroy-failing-when-class-name-is-used

Discussion