😸
Rails class_name指定をしたbelongs_to関連付けでdestroyが失敗する
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
Discussion