2012-03-18 50 views
1

我知道關於這個主題有很多問題,但我認爲我的情況有點不同。has_many with two foreign_keys

使用Rails 2.3.8

我有兩個型號,用戶和消息。

表消息具有列sender_id和recipient_id並且都引用users表。我可以做這樣的事情:

class User < ActiveRecord::Base 

    has_many :messages_as_sender, :class_name => 'Message', :foreign_key => 'sender_id' 
    has_many :messages_as_recipient, :class_name => 'Message', :foreign_key => 'recipient_id' 

    def messages 
    messages_as_sender + messages_as_recipient 
    end 
end 

在大多數情況下,它可能就足夠了,但如果我想這樣做:

user.messages.all(:limit => 10) 
or 
user.messages.all(:conditions => "some condition") 

的Rails提供的東西呢?

UPDATE

我希望更多的東西清楚,但我最終事端像gayavat表示感謝

+0

自我指涉的關係在Rails的醜陋的,醜陋的野獸。要查找更多信息,您需要搜索術語「自我指涉關係」和「複合外鍵」。以下是一些資源:http://stackoverflow.com/questions/279791/is-it-possible-to-have-a-compound-foreign-key-in-rails和http://asciicasts.com/episodes/163 -self-referential-association – kwarrick 2012-03-18 06:53:37

+0

我不知道Rails 2是否可以,但是在Rails 3中,它已經在爲你工作了。 – Azolo 2012-03-18 07:38:04

+0

你也應該考慮給named_scopes一個嘗試。以下是更多信息:http://archives.ryandaigle.com/articles/2008/8/20/named-scope-it-s-not-just-for-conditions-ya-know – Ashitaka 2012-03-18 14:18:23

回答

2

喜歡的東西:

def self.messages 
    Messages.all(:conditions => ["sender_id = ? OR recipient_id = ?", self.id, self.id]) 
end 
相關問題