2011-11-21 20 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

相关问题