我正在制作一个小型文本冒险,我想使用 ActiveRecord 作为对象关系映射。
我遇到的问题是了解如何使用出口将两个房间连接在一起。以下事实是给定的:
- 一个房间可以有多个出口
- 出口可以在不同的方向(它有一个“方向”字段)。此外,它可能还有其他参数,例如我想稍后添加的“锁定”等。
- 一个出口连接两个房间。
但是,现在我被困住了:
到目前为止我所拥有的
class Room < ActiveRecord::Base
has_many :exits
has_many :neighbours, through: :exits
end
class Exit < ActiveRecord::Base
belongs_to :room, dependent: :destroy
belongs_to :room_dest, foreign_key: "room_dest_id", class_name: "Room", dependent: :destroy
end
但这是不完整的。room.neighbours
,例如,根本不工作。
最让我困惑的是如何让出口以两种方式工作:如果我在一个房间添加出口,它不会出现在room.exits
另一个房间的列表中。
有效的是:(给定一个连接room1
和的出口room2
)
room1.first.exits.first.room_dest
(这是room2
)但是room2.exits
是空的,并room1.neighbours
显示一个仅包含自身的列表。
这是如何正确完成的?