我使用InstantRails学习Windows 7中的RoR。
我成功进入sqlite3并创建了一个名为Trades的表,其中包含少量列。我离开了那个并进入了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来仔细检查它,它肯定在那里。我知道这张桌子没有被命名为#34; Trade&#34;所以我尝试重命名就像贸易,但它给了更多的错误。我读到表格名称应该是复数形式,所以我认为我的那部分是正确的。
为什么它说桌子不存在的任何帮助?我会提供我没有想过的任何细节。
答案 0 :(得分:6)
rails g model Trade会为您提供正确的模板,但如果您只想修复迁移文件,请确保创建此表:交易(复数不单数)。
如果您在数据库中有贸易(单数)表,则Rails会给您(表不存在)错误。我认为错误是一种误导。答案 1 :(得分:2)
在Rails中,您必须对数据库进行全面抽象。无论你使用sqlite还是mysql,步骤都是一样的(第一个配置除外,但sqlite不需要)。
正常流程如下:
使用rails生成器生成模型
rails生成模型贸易
编辑关联的迁移文件(类似于db/migrate/
中的2012xxxxxxxx_create_trades.rb)并将其设置为Trade的架构。 syntax here
运行rake db:migrate
以将更改应用于数据库
使用您的模型
答案 2 :(得分:0)
您是否手动创建了表格?如果是这样,它不是创建表/模型的“Rails方式”。你应该使用rails Generator:
rails g model Trade
生成器将在app / models中创建模型类,并在db / migrate目录中创建迁移文件。然后,使用migration DSL添加db列。