has_many 关联迁移 Rails

has_many association migration in Rails

我正在做一个 Rails 项目(Rails 版本 4.2.3)。 我创建了一个 UserTask 模型,但在创建过程中没有包含它们之间的任何关联。 现在我想要一个 user 有很多 tasks 和一个 task 属于一个 user

this threadrails 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 的引用是单数。