2011-11-21 18 views
1

我有一個現有的數據庫結構創建外部或Rails。我已經編輯了一個db/migrate文件,以包含所有適當的列(不確定這是否是正確的方式),但在應用程序中或甚至在交互式控制檯中,Rails正在對查詢表,特別是缺少ID列。Rails誤讀表結構,如何讓它知道當前strcuture

SELECT `dvds`.* FROM `dvds` WHERE (`dvds`.`` >= 0) ORDER BY `dvds`.`` ASC LIMIT 1000 

我也運行了rake db:在編輯具有正確列名和類型的遷移文件後創建。

如何告訴Rails當前的結構是什麼?

這發生在我之前,我想我必須最終刪除所有的遷移文件並從頭開始生成一些文件。我真的不記得我做了什麼來修復它(應該寫下來),但我確定有一個我可以編輯的文件讓Rails知道結構不是?

表模式:

`id` int(11) unsigned NOT NULL, 
    `title` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '', 
    `studio` varchar(255) CHARACTER SET utf8 DEFAULT NULL, 
    `released` varchar(200) CHARACTER SET utf8 DEFAULT NULL, 
    `status` varchar(200) CHARACTER SET utf8 DEFAULT NULL, 
    `sound` varchar(50) CHARACTER SET utf8 DEFAULT NULL, 
    `versions` varchar(100) CHARACTER SET utf8 DEFAULT NULL, 
    `price` varchar(10) CHARACTER SET utf8 DEFAULT NULL, 
    `rating` varchar(50) CHARACTER SET utf8 DEFAULT NULL, 
    `year` varchar(20) CHARACTER SET utf8 DEFAULT NULL, 
    `genre` varchar(255) CHARACTER SET utf8 DEFAULT NULL, 
    `aspect` varchar(50) CHARACTER SET utf8 DEFAULT NULL, 
    `upc` varchar(155) CHARACTER SET utf8 DEFAULT NULL, 
    `dvd_realease` timestamp NULL DEFAULT NULL, 
    `timestamp` timestamp NULL DEFAULT NULL, 
    `directors` varchar(342) CHARACTER SET utf8 DEFAULT NULL, 
    `actors` varchar(342) CHARACTER SET utf8 DEFAULT NULL 

遷移文件:

class CreateDvds < ActiveRecord::Migration 
    def change 
    create_table :dvds do |t| 
     t.integer :id 
     t.string :title 
     t.string :studio 
     t.string :released 
     t.string :status 
     t.string :sound 
     t.string :versions 
     t.string :price 
     t.string :rating 
     t.string :year 
     t.string :genre 
     t.string :aspect 
     t.string :upc 
     t.timestamp :dvd_release 
     t.timestamps 
     t.string :directors 
     t.string :actors 

    end 
    end 
end 

回答

0

對於這個特殊的例子單表/模型,你不必「告訴」 Rails的有關數據庫的現有結構。 ActiveRecord會爲你做到這一點。沒有更新的文件可以使用。

確保dvds表有一個「id」主鍵,那麼你所需要做的就是擁有ActiveRecord類的Dvd。只有在您更新數據庫時才需要遷移(看起來您不是)。

這是使用Rails與傳統數據庫的一個有用的談話slidesha.re/NbOo1他討論了寶石,讓軌道來處理複合主鍵bit.ly/MvEYk

+0

對不起,是'軌腳本/生成模型dvds'或'軌生成模式DVD '(我已經完成了,但是它表示模型已經存在並且只是空的,如果我刪除模型,它會給我這個錯誤:另一個遷移已經命名爲create_dvds:/.../db/migrate/20111116170531_create_dvds。 rb) – kakubei

+0

我發佈的導軌生成器將爲您的模型生成一個腳手架。因此,例如,您可以調用您的模型Dvd,這將生成遷移以創建名爲dvd的表格。 您可以發佈DVD表架構和DVD類和遷移文件嗎? – charliequinn

+0

是的,當我運行'rails生成模型Dvd'時,請參閱上面的內容以瞭解發生了什麼。 – kakubei

相關問題