Rails数据建模:如何在2个对象" Share"同样的has_many列表?

时间:2017-09-12 22:27:54

标签: ruby-on-rails ruby rails-activerecord activerecord-relation

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

enter image description here

现在,在您的帮助下我想知道的是,如何在UserTransaction模型之间建立关系,以便对于两个Transaction中的任何一个,我都可以轻松检索所有User

类似的东西:

  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解决的问题?

提前致谢。

3 个答案:

答案 0 :(得分:1)

如果您有两个用户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" = $1 OR "transactions"."user_two_id" = $2) LIMIT $3  [["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">]>

答案 1 :(得分:1)

这是示例代码

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
}

答案 2 :(得分:0)

使用可以解决这个问题的多面体分析我现在在火车上会为你提供代码,或者你可以开始寻找这个任务并祝你好运;)