在 Rails 中,我如何以编程方式定义许多复杂的相关对象,然后跟踪用户对其状态的更改?

In Rails, how could I programmatically define many complex, related objects and then track user changes to their state?

这可能是一个不寻常的情况,也是一个很难回答的问题,所以请耐心等待。

假设我在我的 Rails 应用中代表一栋巨大的房子。房子由房间和门组成。 RoomDoor 是我的模型。房子可以有几千个房间和门。

但是我——开发人员——想要预定义所有房间、门以及它们之间的关系。我想以编程方式定义它们,而不是让用户制作它们。当应用程序启动时,所有这些房间和门都存在。然后用户可以通过某些方式修改它们,例如更改油漆颜色或锁门。

所以房间和门可以有状态。但是房子的布局是预先确定的。还有房间的名称,房间里有哪些门。

我在找什么:

我怎样才能实现这样的目标?

您所描述的本质上只是一个普通的应用程序(Rails 或任何其他类型)。您定义实体(模型)、它们具有的属性以及它们之间的关系。用户可以 create/delete 与简单地更改属性的实体类型是您在创建用户界面时做出的选择。

这个问题太宽泛,无法详细介绍,但是您在 Rails 术语中具体询问了一些事情:

  1. 您可以使用 db/seeds.rb 文件和 rails db:seed 任务将您的数据库填充到 定义模型后的特定已知状态。重置到该状态就像删除表格并重新 运行 db:seed 一样简单。在不强制完全重置数据库的情况下编写 scripts/tasks 批量更新数据也相对容易。添加额外的预定义数据也是如此。
  2. 当您为资源创建路由时 (config/routes.rb) Rails 默认情况下会为所有 CRUD (CReate/Update/Delete) 操作创建 routes/actions。但是,覆盖该行为并仅创建适合该类型的 routes/actions 很简单:

    resources :rooms, only: [:index, :edit, :update]