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 
} 
相關問題