1

我希望能夠輕鬆訪問current_users對話。 E.G.如何在rails上的ruby模型中指定2個外鍵?

current_user.conversations 

的事情是當前用戶可以是一個發件人或收件人(SENDER_ID或recipient_id)

class User < ActiveRecord::Base 

    has_many :conversations, :foreign_key => "sender_id" 

這工作,但有些時候,發件人是收件人或比方說有人發送某人10條消息作爲發件人,並且收件人尚未回覆任何消息,但數據庫中仍存在對話。

如果我以該用戶身份登錄並輸入current_user.conversations,則不會出現任何內容,因爲用戶模型中指定的外鍵是sender_id。沒有辦法指定兩者嗎?像在SQL中使用「或」?

親切的問候

回答

1

我不相信有辦法做到正是你想要的東西,但也有一些替代方法,你可能要考慮:

1)拆分起來分成兩個關係,sent_conversations和received_conversations,然後你可以定義一個結合它們的方法。

2)添加一個新的類的方法,做一些自定義的SQL:

class User < ActiveRecord::Base 
    def conversations 
    Conversation.where("sender_id = :id OR receiver_id = :id", id: self.id) 
    end 
end 
+0

只是增加了一個類的方法,以對話的模式,類似於您在例如數做了什麼2. – LondonGuy

+0

剛剛意識到我的代碼有一個它很少有錯誤,希望這不會讓你太多:)現在他們已經修好了。 –