2016-12-20 73 views
0

我正在軌道上的迷宮項目,諷刺的是,我迷路了。到目前爲止,我對模型之間的has_many_though關係相當陌生,所以如果一個模型通過某些東西具有許多自身特性,那又該如何呢?has_many自己雖然

基本上,每個Room有很多Rooms。我創建了一個Tunnel模型來連接這些房間,以便通過隧道將一個房間連接到許多其他房間。但是在建立這些關係時它會變得更加棘手。

class Room < ApplicationRecord 

    has_many :tunnels 
    has_many :rooms, through: :tunnels 

end 

而我的隧道到達連接兩個房間

class Tunnel < ApplicationRecord 
    belongs_to :lemmin_room, :foreign_key => "room1_id" 
    belongs_to :lemmin_room, :foreign_key => "room2_id" 
end 

Rails文檔是很清楚,當談到腳趾MODELA已通過ModelC許多B型,但我不認爲它曾經提到MODELA = ModelB。

+0

這種關係是單向的嗎(房間裏有很多其他的房間穿過隧道,但也許如果我在其中一個連通的房間裏,我不能通過相同的隧道回到前一個房間?)或者是鏡像關係(連接到另一個房間B的房間A可以通過相同的隧道從B獲得)? – guiniveretoo

+0

如果需要,我可以通過同一條隧道回到以前的房間,是的。 –

回答

0

您需要定義不同名稱的兩個belongs_to協會,如:

class Tunnel < ApplicationRecord 
    belongs_to :lemmin_room_1, :foreign_key => "room1_id" 
    belongs_to :lemmin_room_2, :foreign_key => "room2_id" 
end 

然後,在你Room型號:

class Room < ApplicationRecord 
    has_many :tunnels 
    has_many :rooms, through: :tunnels, source: :lemmin_room_1 
end 

您可以指定source讓你在Tunnel想要什麼房。