2013-07-30 24 views
1

我有案例模型。這個案例模型有一個客戶和一個對手領域。 他們都是Person模型。一個案件​​只有一個客戶和一個對手。現在一個人可以成爲一個客戶,也可以是一個對手,一個人可以有很多個案。 我怎樣才能建立這種協會在鐵軌?當我將Person模型分解成一個客戶端和一個對手模型時,它看起來很容易,但對我來說這似乎不太乾燥。數據庫關聯,案例模型有兩個人

這是我目前所面對的

class Person < ActiveRecord::Base 
    has_many :cases 
end 

class Case < ActiveRecord::Base 
    belongs_to :client, class_name: 'Person' 
    belongs_to :opponent, class_name: 'Person' 
end 

到目前爲止是這種情況,我可以在客戶端和對手增加的情況下。 但是我怎樣才能找到所有的案件通過客戶端或對手?

---老
當我有我的Client.first.cases SQL查詢:
--new
當然 我的意思是Person.first.cases--,因爲我沒有一個客戶表,只是我的帳號表中的帳戶名爲client_id或opponent_id

SELECT cases。* FROM cases其中casesperson_id = 3

現在,這必須是客戶端ID或對手ID

感謝您的幫助

回答

0

(〜最後10分鐘)http://www.youtube.com/watch?v=AhFK0UO9VPs
下面幾乎是我對Person模型和Message模型的問題的解釋,其中消息模型具有receiver_id和sender_id。
不需要在例模型(回到我的問題)的外鍵,它是需要這樣

class Person < ActiveRecord::Base 
    has_many :cases, foreign_key: "client_id" 
end 

的人物模型內部,一個Person對象上我可以使用不person.cases,我會得到所有的情況下,這個人是客戶。
我仍然不知道,如何讓的情況下,該人是對手

0

當你詢問Client.first.cases,在此查詢Active Record的理解,你希望所有的情況下被取出屬於Person表的第一條記錄(其ID爲3)。 person_idclient_id,因爲第一個客戶在你的人表id爲3

如果你會寫:Client.first,在SQL查詢中您將看到:

SELECT person.* FROM person WHERE person_id = 3 

我想,你應該嘗試通過您的外鍵約束Case型號如下:

class Case < ActiveRecord::Base 
    belongs_to :client, class_name: 'Person', foreign_key: "client_id" 
    belongs_to :opponent, class_name: 'Person',foreign_key: "opponent_id" 
end 

謝謝。

+0

對不起,我沒有平均Clients.first.cases,我的意思Person.first.cases – santa

+0

更新我的答案,它應該幫助。 –

+0

不知道我是否錯過了一些東西,但我卻找不到一個人的所有情況。我必須自己做一個查詢嗎?例如像Person.first.client_cases或Person.first.opponent_cases? – santa