Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Rails误读了表结构,如何使其了解当前结构_Mysql_Ruby On Rails - Fatal编程技术网

Mysql Rails误读了表结构,如何使其了解当前结构

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

我有一个在Rails外部创建的现有数据库结构。我已经编辑了一个db/migrate文件,以包含所有正确的列(不确定这样做是否正确),但在应用程序中,甚至在交互控制台中,Rails正在错误地生成查询表所需的SQL,特别是缺少ID列

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。这非常令人不安。