has_many 关联迁移 Rails
has_many association migration in Rails
我正在做一个 Rails 项目(Rails 版本 4.2.3)。
我创建了一个 User
和 Task
模型,但在创建过程中没有包含它们之间的任何关联。
现在我想要一个 user
有很多 tasks
和一个 task
属于一个 user
。
从 this thread 到 rails g migration AddUserToTask user:belongs_to
我能够在任务 table 中插入外键 user_id。但是如何添加 has_many
迁移?我更新了 User
模型:
class User < ActiveRecord::Base
has_many :customers
end
但我不确定如何编写迁移。到目前为止我写了这个:
class addTasksToUser < ActiveRecords::Migration
def change
update_table :users do |t|
t.has_many :tasks
end
add_index :users, taks_id
end
end
但是 rake db:migrate
没有执行任何操作。这是设置 has_many
关系的正确方法吗?
在模型中设置关联:
class User < ActiveRecord::Base
has_many :tasks
end
class Task < ActiveRecord::Base
belongs_to :user
end
删除您显示的迁移文件。
添加对 tasks
table 的引用(假设你已经有 tasks
table):
rails g migration add_references_to_tasks user:references
迁移数据库:
rake db:migrate
如果您还没有 tasks
table,请创建一个:
rails g migration create_tasks name due_date:datetime user:references # add any columns here
迁移数据库:
rake db:migrate
从现在开始,您的任务将具有 user_id
属性。
将 has_many :tasks
添加到 User
模型并将 belongs_to :user
添加到 Task
模型。在您的迁移文件中,删除 change
方法的所有当前主体并包含 add_index :tasks, :user_id
行。之后,运行迁移正常。
我知道这是一个旧线程,但努力只是为了改进它。
我认为您的目的是在 table 中显示 reference 外键。
在这种情况下:
class addTasksToUser < ActiveRecords::Migration
def change
update_table :users do |t|
t.references :task
end
end
请确保您对带主键的 table 的引用是单数。
我正在做一个 Rails 项目(Rails 版本 4.2.3)。
我创建了一个 User
和 Task
模型,但在创建过程中没有包含它们之间的任何关联。
现在我想要一个 user
有很多 tasks
和一个 task
属于一个 user
。
从 this thread 到 rails g migration AddUserToTask user:belongs_to
我能够在任务 table 中插入外键 user_id。但是如何添加 has_many
迁移?我更新了 User
模型:
class User < ActiveRecord::Base
has_many :customers
end
但我不确定如何编写迁移。到目前为止我写了这个:
class addTasksToUser < ActiveRecords::Migration
def change
update_table :users do |t|
t.has_many :tasks
end
add_index :users, taks_id
end
end
但是 rake db:migrate
没有执行任何操作。这是设置 has_many
关系的正确方法吗?
在模型中设置关联:
class User < ActiveRecord::Base
has_many :tasks
end
class Task < ActiveRecord::Base
belongs_to :user
end
删除您显示的迁移文件。
添加对 tasks
table 的引用(假设你已经有 tasks
table):
rails g migration add_references_to_tasks user:references
迁移数据库:
rake db:migrate
如果您还没有 tasks
table,请创建一个:
rails g migration create_tasks name due_date:datetime user:references # add any columns here
迁移数据库:
rake db:migrate
从现在开始,您的任务将具有 user_id
属性。
将 has_many :tasks
添加到 User
模型并将 belongs_to :user
添加到 Task
模型。在您的迁移文件中,删除 change
方法的所有当前主体并包含 add_index :tasks, :user_id
行。之后,运行迁移正常。
我知道这是一个旧线程,但努力只是为了改进它。 我认为您的目的是在 table 中显示 reference 外键。 在这种情况下:
class addTasksToUser < ActiveRecords::Migration
def change
update_table :users do |t|
t.references :task
end
end
请确保您对带主键的 table 的引用是单数。