Mysql Rails误读了表结构,如何使其了解当前结构
我有一个在Rails外部创建的现有数据库结构。我已经编辑了一个db/migrate文件,以包含所有正确的列(不确定这样做是否正确),但在应用程序中,甚至在交互控制台中,Rails正在错误地生成查询表所需的SQL,特别是缺少ID列Mysql Rails误读了表结构,如何使其了解当前结构,mysql,ruby-on-rails,Mysql,Ruby On Rails,我有一个在Rails外部创建的现有数据库结构。我已经编辑了一个db/migrate文件,以包含所有正确的列(不确定这样做是否正确),但在应用程序中,甚至在交互控制台中,Rails正在错误地生成查询表所需的SQL,特别是缺少ID列 SELECT `dvds`.* FROM `dvds` WHERE (`dvds`.`` >= 0) ORDER BY `dvds`.`` ASC LIMIT 1000 在使用正确的列名和类型编辑迁移文件之后,我还运行了rakedb:create 如何告诉Ra
SELECT `dvds`.* FROM `dvds` WHERE (`dvds`.`` >= 0) ORDER BY `dvds`.`` ASC LIMIT 1000
在使用正确的列名和类型编辑迁移文件之后,我还运行了rakedb:create
如何告诉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
class CreateDVD
对于这个特定的单表/模型示例,您不必“告诉”Rails数据库的当前结构。ActiveRecord将为您执行此操作。您没有为此更新的文件
确保Dvd表的主键为“id”,然后您只需将ActiveRecord类设置为Dvd即可。仅当您正在以任何方式更新数据库时才需要迁移(看起来您没有这样做)
这是一篇将rails与遗留数据库结合使用的有用演讲。他讨论了一个允许rails处理复合主键的gem对不起,是
rails脚本/生成模型Dvd
还是rails生成模型Dvd
(我已经这样做了,但它说模型已经存在,它只是空的,如果我删除模型,它会给我这个错误:另一个迁移已经命名为create_dvds:/…/db/migrate/20111116170531_create_dvds.rb)我发布的rails生成器将为您的模型生成一个脚手架。例如,您将调用您的模型Dvd,这将生成一个迁移以创建名为Dvd的表。您可以发布Dvd表架构和Dvd类及迁移文件吗?是的,当我运行rails generate model Dvd
时,请参见上文了解发生的情况。id列为默认情况下作为主键添加。请从迁移中删除此项,然后重试?没有乐趣,甚至不用使用generate命令中的字段从头开始创建scaffold。这非常令人不安。