【发布时间】:2015-06-02 17:16:22
【问题描述】:
我正在制作一个小型文本冒险游戏,我想使用 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 显示一个只包含它自己的列表。
这是如何正确完成的?
【问题讨论】:
标签: ruby activerecord orm rails-activerecord adventure