1

我已经完成了 O'Really 的 Learning Rails 3,现在是时候在真实项目中试验知识了,我将部署到 Red Hat 的 OpenShift 平台。在我的笔记本电脑代码项目文件夹中搜索,我找到了一个简单的 TODO 任务管理器,我曾经用 C++ 编写过一次。因此,让该项目重新焕发生机是个好主意,这次是作为 Rails 中的 Web 任务管理服务,允许使用 OmniAuth 进行身份验证。

最初的 C++ 项目是从 OOP 的角度计划的。您可以创建一个带有当前 ID 号、文本字符串、日期和时间的“任务”对象。任务的每个部分都作为不同的 C++ 类。Eash one 在构造函数上包含了它的验证。然后将任务保存到 sqlite 或将它们导出为纯文本,您可以在应用程序上共享或再次阅读。

所以,回到正题,我正在尝试使用 MVC 将这个小应用程序改编为 Rails 中更复杂的东西。

我考虑过添加一个脚手架,它可以让表单填充任务的文本字段并将其传递给控制器​​。控制器将设置当前日期和时间,保存到数据库时默认设置 ID。验证应该在模型上进行,我将创建一个迁移以在该字段上构建一个表。由于我将使用 OmniAuth 添加多用户支持(因此每个用户都可以保存自己的任务),我应该创建一个包含用户信息的新数据库表。

但是我应该为每个用户创建一个新的任务表,然后将它们映射到用户表吗?或者只是创建一个任务表并将每个用户的任务放入其中,然后将所有任务映射到那里?

我想不出将用户任务保存到数据库的好处。

有任何想法吗?

提前致谢

4

2 回答 2

1

这是假设一个用户可以有许多任务,但一个任务只能属于一个用户。

您将拥有一张tasks桌子并将所有用户的任务放在那里。

您需要在表 ( ) 中添加一user_id列并将以下内容添加到模型中 -tasksrails g migration add_user_id_to_tasks user_id:integer

class Task < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :tasks
end

参考:Rails Guide to ActiveRecord 关联

于 2012-09-06T19:08:22.397 回答
0

您的模型将如下所示:

class User < ActiveRecord::Base
  has_many :tasks
end
class Task < ActiveRecord::Base
  belongs_to :user
end

您的表格将如下所示(以伪临时符号表示):

Users table => id:integer, name:String
Tasks table => id:integer, task:Text, user_id:integer

这有帮助吗?

于 2012-09-06T19:17:10.407 回答