2011-01-06 67 views
23

我是rails新手(通常是一個python人員),並且剛剛嘗試構建一個簡單的任務管理器應用程序以獲得樂趣。我正在使用Devise進行身份驗證,並且有一個單獨的Task對象正在嘗試與用戶關聯。我已經添加了以下的工作模式:如何在數據庫中反映Ruby on Rails中新的belongs_to和has_many關係

class Task < ActiveRecord::Base 
    belongs_to :user 
end 

,我已經添加了我的用戶模型下面的設計:

class User < ActiveRecord::Base 
    has_many :tasks 

    <<normal Devise stuff>> 
end 

每當我添加了這個信息,然後我跑:耙分貝:遷移。然後,當我試圖用它做任何事情時,它給了我一個錯誤,指出user_id的數據庫字段不存在。

我相信這是一件相當簡單的事情,我錯過了。謝謝您的幫助。

+0

對不起,:夢想混亂,又增加了從其他項目中意外的東西。現在應該修好了。 – 2011-01-06 21:21:00

回答

39

belongs_to(或任何其他)關係添加到您的模型僅告訴活動記錄模型鏈接在邏輯上。這使您可以訪問像task.user這樣的方法。爲了實際工作,實例必須通過數據庫字段鏈接。

這是缺少的步驟:您需要創建一個遷移,將向Task表中添加一列,指示它屬於哪個用戶。

rails g migration AddUserIdToTasks user_id:integer 

注意AddUserIdToTasks可以是任何你想要的名稱。沒什麼區別。然後您可以打開db/migrations/add_user_to_tasks並查看它的功能。通常self.up會修改數據庫的方式,self.down會做相反的操作(所以在這種情況下,請刪除used_id)。

然後實際執行SQL命令來更改數據庫表和模式,運行

rake db:migrate 
+0

我這樣做了,它似乎將它添加到數據庫中,謝謝!現在我想我需要將它添加到模板中以實際填充值並查看它是否都可以很好地播放。 – 2011-01-06 21:45:10

5

你需要生成一個遷移添加外鍵第一:

rails g migration AddUserIdToTasks user_id:integer 

然後運行db:migrate

如果你希望用戶能夠引用該協會爲user.dreams,你需要將:class_name => 'Task'添加到用戶模型中的has_many行。

0

你的用戶類似乎太夢幻了,無法完成它的任務。

has_many :dreams // should be probably 
has_many :tasks 

假設你的任務模型有一個user_id字段,也就是說。

相關問題