如何在数据库中反映Ruby on Rails中新的belongs_to和has_many关系

我是rails(通常是一个python人)的新手,并且刚刚尝试构建一个简单的任务管理器应用程序以获得乐趣。 我正在使用Devise进行身份validation,并且我正在尝试与用户关联的单个Task对象。 我在Task模型中添加了以下内容:

class Task < ActiveRecord::Base belongs_to :user end 

我在Devise的用户模型中添加了以下内容:

 class User < ActiveRecord::Base has_many :tasks <> end 

每当我添加此信息时,我都会运行:rake db:migrate。 然后它给了我一个错误,当我尝试用它做任何事情时,user_id的数据库字段不存在。

我确信这是一件相当简单的事情。 谢谢您的帮助。

belongs_to (或任何其他)关系添加到模型仅告知活动记录模型是逻辑链接的。 这使您可以访问task.user方法。 为了实现这一点,必须通过数据库字段链接实例。

这是您缺少的步骤:您需要创建一个迁移,该列将向Task表添加一个列,指示它属于哪个用户。

 rails g migration AddUserIdToTasks user_id:integer 

注意AddUserIdToTasks可以是您想要的任何名称。 没什么区别。 然后,您可以打开db/migrations/add_user_to_tasks并查看其function。 通常self.up会修改数据库的方式,而self.down会反过来(因此,在这种情况下,删除used_id)。

然后,要实际执行SQL命令以更改数据库表和模式,请运行

 rake db:migrate 

您需要先生成迁移以添加外键:

 rails g migration AddUserIdToTasks user_id:integer 

然后运行db:migrate

如果您希望用户能够将关联引用为user.dreams ,则需要将:class_name => 'Task'到User模型中的has_many行。

您的用户类似乎太梦幻,无法处理它的任务。

 has_many :dreams // should be probably has_many :tasks 

假设你的任务模型有一个user_id字段,那就是。