我試圖用一個:has_many :through
類型關聯,但我發現了以下錯誤:關於這類事情剛過了拼寫錯誤我是否需要爲has_many:through關聯創建一個關聯表?
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: work_units.developer_id:
許多其他職位,但我檢查我的。
class Developer < ActiveRecord::Base
attr_accessible :skype_name, :language_ids, :user_attributes
has_many :work_units
has_many :projects, :through => :work_units
...
end
class Project < ActiveRecord::Base
attr_accessible :complete, :description, :finalised, :price
has_many :work_units
has_many :developers, :through => :work_units
...
end
class WorkUnit < ActiveRecord::Base
attr_accessible :hours_worked
belongs_to :project
belongs_to :developer
end
我跑db:migrate
它沒有抱怨。我確實犯了一個錯誤,必須回滾數據庫然後重新遷移,但我認爲我做對了。我使用annotate
寶石,它不顯示任何我期望的關係ID。那麼,我需要創建一個WorkUnits表還是缺少一些東西?導軌指南沒有提到手動製作桌子。
編輯
這是我用來創建工作單元模型遷移和東西:
class CreateWorkUnits < ActiveRecord::Migration
def change
create_table :work_units do |t|
t.integer :hours_worked, :default => 0
t.timestamps
end
end
end
編輯從我schema.rb 2
摘錄:
create_table "work_units", :force => true do |t|
t.integer "hours_worked", :default => 0
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "projects", :force => true do |t|
t.string "description"
t.decimal "price", :precision => 8, :scale => 2
t.boolean "complete", :default => false
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
同樣適用於:developers
。那麼,爲什麼我的遷移不會爲我添加關聯信息?
重新運行註釋:'bundle exec annotate'。您可能需要重新啓動開發服務器才能選取數據庫更改。 – 2013-05-09 20:09:02
對於'has_many:through'關係,只有'WorkUnit'類的表必須與'project_id'和'developer_id'整數列一起存在。你可以檢查你的'db/schema.rb'是否是當前定義的。 – 2013-05-09 20:11:27