0

简而言之,当我创建一个Transaction记录时,它有两个外键。对于参与Transaction两个用户,即:Rails数据建模:当2个对象“共享”相同的has_many列表时如何建立关系?

enter image description here

现在,我想知道您的热心帮助,是怎样建立的关系(一个或多个)UserTransaction型号,以便我可以轻松检索所有Transaction s的两个User s中的任何一个。

喜欢的东西:

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解决?

在此先感谢。

,可以解决这个问题,我在火车上

回答

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">]> 
+0

很酷,谢谢@汤姆科普兰。但不应该是: Transaction.where(user_one_id:1).or(Transaction.where(user_two_id:1))? – jlstr

+1

哦,你是对的 - 我误解了查询使用的那组ID。但是,似乎'或'是要走的路。 –

+0

这样做,对不对?我想附加的问题归结为,我做user_one_id和user_two_id外键?有必要吗? – jlstr

0

使用polymorfic assossiations现在会为您提供的代码,或者你可以开始寻找弥补了这个任务,祝你好运;)

+0

谢谢你的回复。我不确定多态协会如何适应这个问题,我可以请求一些示例代码吗?那就是当你可以提供它的时候。 – jlstr

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 
} 
相关问题