表 Transaction 和 User - Ruby on Rails 应使用哪种关系?

What kind of relationship should be used for tables Transaction and User - Ruby on Rails?

我是新手。我刚刚开始在 Rails 上通过 Ruby 学习更多关于后端的知识。 我有以下表格 - 用户和 User_Transaction.

所以基本上我想要一个包含发送方和接收方信息的交易。就我个人而言,这听起来更像是 has_and_belongs_to_many 关系。但是,我真的很困惑如何处理这个问题以及我应该如何包含 2 个外键。 我很想了解更多这方面的知识,如果有人帮助我,我会很高兴:)。

迁移 用户

class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.integer :username
      t.integer :password
      

      t.timestamps
    end
  end
end

交易

class CreateTransactions < ActiveRecord::Migration[6.0]
  def change
    create_table :transactions do |t|
      t.string :sender
      t.string:receiver
      t.decimal :amount
      

      t.timestamps
    end

  end
end

型号

交易

class ::Transaction < ApplicationRecord
  #We have two users per transaction 'Sender' and 'Receiver'
    has_and_belongs_to_many :users
    # belongs_to :sender, :class_name => 'User'
    # belongs_to :receiver, :class_name => 'User'
end

用户

class User < ApplicationRecord
  # has_many :accounts
  # has_many :transactions
  has_and_belongs_to_many :transactions

end

这个怎么样:

迁移

class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :username
      t.string :password

      t.timestamps
    end
  end
end

class CreateTransactions < ActiveRecord::Migration[6.0]
  def change
    create_table :transactions do |t|
      t.references :sender, index: true, null: false, foreign_key: {to_table: :users}
      t.references :receiver, index: true, null: false, foreign_key: {to_table: :users}
      t.decimal :amount
      
      t.timestamps
    end

  end
end

型号

class User < ApplicationRecord
  has_many :send_transactions, class_name: "Transaction", foreign_key: :sender, inverse_of: :sender
  has_many :receive_transactions, class_name: "Transaction", foreign_key: :receiver, inverse_of: :receiver
end

class Transaction < ApplicationRecord
  belongs_to :sender, class_name: "User", inverse_of: :send_transactions
  belongs_to :receiver, class_name: "User", inverse_of: :receive_transactions
end