2016-12-20 5 views
0

私は迷路のプロジェクトで作業しており、皮肉なことに、私は迷ってしまった。これまでのところ、私はモデル間でhas_many_though関係がかなり新しくなっていました。has_many of thoughしかし、

基本的に、各Roomには、多くの場合、Roomsがあります。私はこれらの部屋を接続するためにTunnelモデルを作成しました。そのため、部屋はトンネルを介して他の多くの人々に接続されています。しかし、これらの関係を築くことは難しくなります。 =それはつま先MODELAがModelC通じ、多くのモデルBを持って来るとき

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に言及しているとは思いませんModelB。

+0

この関係は一方向です(部屋にはトンネルを通る他の多くの部屋がありますが、それらの接続された部屋の1つにある場合、前の部屋に同じトンネルで戻ることはできません)ミラーリングされた関係(別の部屋Bに接続された部屋Aは、同じトンネルを経由してBから来ることができます)? – guiniveretoo

+0

必要に応じて同じトンネルで前の部屋に戻ることができます。はい。 –

答えて

0

のようにあなたは、異なる名前を持つ2つのbelongs_to関連付けを定義する必要があります:あなたのRoomモデルに続いて

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

、:

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

あなたはTunnelに欲しいものを部屋取得するsourceを指定することができます。

関連する問題