2012-03-18 9 views
1

私はこの件に関して多くの質問がありますが、私のケースは少し違うと思います。has_many with foreign_keys

使用して、レール2.3.8

私は2つのモデル、ユーザとメッセージを持っています。

テーブルメッセージには、sender_idとrecipient_idの2つの列があり、両方とも参照テーブルがあります。

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 and http://asciicasts.com/episodes/163 -self-referential-association – kwarrick

+0

Rails 2がそうであるかどうかは分かりませんが、Rails 3ではすでに動作しています。 – Azolo

+0

named_scopesにも試してみてください。ここにいくつかの情報があります:http://archives.ryandaigle.com/articles/2008/8/20/named-scope-it-s-not-just-for-conditions-ya-know – Ashitaka

答えて

2

何かのように言ったように私はのsomethinで終わる:

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