簡體   English   中英

Rails 中的 has_many 關聯遷移

[英]has_many association migration in Rails

我正在做一個 Rails 項目(Rails 版本 4.2.3)。 我創建了一個UserTask模型,但在創建過程中沒有包含它們之間的任何關聯。 現在我希望一個user有許多tasks而一個task屬於一個user

通過rails g migration AddUserToTask user:belongs_to從此線程,我能夠在任務表中插入外部 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表的引用(假設您已經有了tasks表):

rails g migration add_references_to_tasks user:references

遷移數據庫:

rake db:migrate

如果您還沒有tasks表,請創建一個:

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 :userTask模型。 在您的遷移文件中,刪除change方法的所有當前主體並包括add_index :tasks, :user_id行。 之后,正常運行遷移。

我知道這是一個舊線程,但努力只是為了改進這一點。 我想你想要的是在表中顯示參考外鍵 在這種情況下:

class addTasksToUser < ActiveRecords::Migration   
   def change
     update_table :users do |t|
     t.references :task
   end   
end

請確保您對帶有主鍵的表的引用是單數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM