如何在数据库中反映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字段,那就是。