Ruby on Rails从控制台访问 - (表不存在)

3

我正在使用InstantRails在Windows 7上学习RoR。

我已经成功地进入了sqlite3,并创建了一个名为Trades的表格,其中包含一些列。然后我退出了sqlite3并进入了Ruby控制台。

>> class Trade < ActiveRecord::Base; end
=> nil
>> trade = Trade.new
=> #<Trade barterID: nil, title: nil, message: nil, created_at: nil, updated_at: nil>
>> trade.class
=> Trade(Table doesn't exist)

我再次仔细检查了,在sqlite3中它绝对存在。我知道表格名称不是“Trade”,所以我尝试将它重命名为Trade,但会出现更多错误。我读到表格名称应该采用复数形式,因此我认为这部分是正确的。
请问为什么它说表格不存在?如果我有任何遗漏的细节,我会提供它们。

4
#<Trade barterID: nil, title: ...> 说明表存在且Rails知道其外观。 barterID 列似乎有点可疑。请删除该列,添加一个 id 列,然后再试一次。接着了解 migrations。Rails 喜欢按照自己的方式处理事情。 - mu is too short
你是否已经:a) 检查了 log/development.log 中发送到数据库的查询语句;b) 确认你运行控制台的环境与创建表格的数据库相匹配。 - phoet
我认为最好的解决方案是安装Linux并在其上使用Rails进行工作。说真的 - 我从未想过我会如此热爱Ubuntu ;) - lukaszkups
请展示您的迁移!如果您学习Linux,请不要使用带有GUI的发行版,那是给那些不知道自己在做什么的人准备的! - davidb
3个回答

7

当你运行rails g model Trade命令时,会为你生成正确的模板。但是,如果你只想修复迁移文件,请确保你创建了这张表:trades(复数形式)

如果你的数据库中有trade表(单数形式),Rails会报错(表不存在)。我认为这种错误信息有点误导性。


2
在Rails中,你需要完全抽象你的数据库。无论你使用sqlite还是mysql,步骤都是相同的(除了第一个配置,但sqlite不需要)。
正常的过程如下:
1.使用rails generator生成模型
rails generate model Trade 2.编辑相关的迁移文件(类似于db/migrate/中的2012xxxxxxxx_create_trades.rb),并将Trade的架构放入其中。语法请参考这里
3.运行rake db:migrate以将更改应用到数据库中。
4.使用你的模型。

0
你是手动创建表格的吗?如果是,那么这不是创建表格/模型的“Rails方式”。您应该使用Rails生成器:
rails g model Trade

生成器将在app/models中创建一个模型类,并在db/migrate目录中创建一个迁移文件。然后,使用migration DSL添加db列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接