Rails 数据建模:当 2 个对象 "Share" 相同 has_many 列表时如何建立关系?

Rails Data Modelling: How to establish relationships when 2 Objects "Share" the same has_many list?

简而言之,当我创建一个 Transaction 记录时,它有两个 外键 。对于参与 Transaction 的两个用户,即:

现在,在您的帮助下,我想知道的是如何在 User 和 [=14= 之间建立 关系 ] 模型,这样我就可以轻松检索两个 User 中任何一个的所有 Transaction

类似于:

  user_one = User.find(1)
  user_two = User.find(2)

  user_one.transactions # returns all Transactions where user_one.id == 
                        # user_one_id Or user_one.id == user_two_id

  user_two.transactions # returns all Transactions where user_two.id == 
                        # user_one_id Or user_two.id == user_two_id

实现此目标的最佳方法是什么?在这种情况下,最好在事务模型中建立外键吗?或者这是一个只能通过 ActiveRecordQuery 解决的问题?

提前致谢。

使用多态关联可以解决这个问题我正在培训中,我会为您提供代码,或者您可以开始查找此任务,祝您好运;)

如果您有两个用户 ID 并且想要查询 Transaction 它们的某种组合,您可以使用 or 子句:

>> Transaction.where(user_one_id: 1).or(Transaction.where(user_two_id: 2))
  Transaction Load (4.3ms)  SELECT  "transactions".* FROM "transactions" WHERE ("transactions"."user_one_id" =  OR "transactions"."user_two_id" = ) LIMIT   [["user_one_id", 1], ["user_two_id", 2], ["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<Transaction id: 1, user_one_id: 1, user_two_id: 2, created_at: "2017-09-12 23:25:39", updated_at: "2017-09-12 23:25:39">]>

这是示例代码

class Transaction
  def move
    return ""
  end
end

class User1 < Transaction
  def move
    return 'User1 move: X'
  end
end


class User2 < Transaction
  def move
    return'User2 move: O'
  end
end



transactions = [User1.new, User2.new]
transactions.each {|tran|
  print tran.move
}