[英]has_many association migration in Rails
我正在做一個 Rails 項目(Rails 版本 4.2.3)。 我創建了一個User
和Task
模型,但在創建過程中沒有包含它們之間的任何關聯。 現在我希望一個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 :user
到Task
模型。 在您的遷移文件中,刪除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.