0

我用 railsinstaller 安装了这个:

C:\Sites>ruby -v
ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mingw32]

C:\Sites>rails -v
Rails 3.0.3

C:\Sites>gem -v
1.3.7

我使用 railinstaller 安装 Ruby on Rails。起初我用 Ruby 和 Rails 的更新版本安装了 3.0.0 版本,但是,由于我想使用一些 Rails 3.1.0 代码,我卸载了 v 3.0.0 并安装了其他版本,但结果很糟糕。我什至无法运行,rails server所以我再次尝试,只有这个版本有效。

我正在运行“敏捷 Web 开发”第 6 章中的示例:

  1. 使用 :rails new depot 创建 Rails 应用程序
  2. 使用以下命令生成脚手架:

    rails generate scaffold Product\
    title:string description:text image_url:string price:decima
    
  3. 通过添加小数的长度来更改 create_product.rb。

我准备好了一切,但是当我运行时rake db:migrate,我得到了这个:

C:\Sites\depot>rake db:migrate
(in C:/Sites/depot)
==  CreateProducts: migrating =================================================
-- create_table(:products)
rake aborted!
An error has occurred, this and all later migrations canceled:

undefined method `ext' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0
x599f4c0>

(See full trace by running task with --trace)

这是完整的跟踪:

C:\Sites\depot>rake db:migrate --trace
(in C:/Sites/depot)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
==  CreateProducts: migrating =================================================
-- create_table(:products)
rake aborted!
An error has occurred, this and all later migrations canceled:

undefined method `ext' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x4c4d618>
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/schema_definitions.rb:326:in `method_missing'
C:/Sites/depot/db/migrate/20140108105456_create_products.rb:5:in `up_without_benchmarks'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:157:in `create_table'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:383:in `send'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:383:in `method_missing'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:359:in `say_with_time'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/1.8/benchmark.rb:293:in `measure'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:359:in `say_with_time'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:379:in `method_missing'
C:/Sites/depot/db/migrate/20140108105456_create_products.rb:3:in `up_without_benchmarks'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:312:in `send'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:312:in `migrate'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/1.8/benchmark.rb:293:in `measure'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:312:in `migrate'
F:0:in `__send__'
F:0:in `migrate'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:537:in `migrate'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:611:in `call'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:611:in `ddl_transaction'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/transactions.rb:204:in `transaction'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:611:in `ddl_transaction'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:536:in `migrate'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:523:in `each'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:523:in `migrate'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:433:in `up'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/migration.rb:415:in `migrate'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/railties/databases.rake:142
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/1.8/monitor.rb:242:in `synchronize'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
F:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31
F:/RailsInstaller/Ruby1.8.7/bin/rake:19:in `load'
F:/RailsInstaller/Ruby1.8.7/bin/rake:19

我对 Ruby on Rails 很陌生,不知道如何解决这个错误。我该如何解决这个问题?非常感谢!

4

3 回答 3

2

我已经完成了提供的所有步骤,您似乎有语法错误。这是迁移代码:

class CreateProducts < ActiveRecord::Migration
 def self.up
  create_table :products do |t|
   t.string :title
   t.text :description
   t.string :image_url
   t.decimal :price

   t.timestamps
  end

 end

 def self.down
  drop_table :products
 end
end

在存储描述的第 5 行,您似乎添加了一个空格或删除了t.t.

看看这段代码的行:

t.text :description
于 2014-01-08T14:37:56.373 回答
1

看起来您在此文件中有错误:

C:/Sites/depot/db/migrate/20140108105456_create_products.rb:5

错误消息告诉您出了什么问题:

An error has occurred, this and all later migrations canceled:

undefined method `ext'   

ext在“20140108105456_create_products”文件中有“”一词。而且,这不是这个文件知道的方法。

如果您在问题中发布迁移文件,我会告诉您如何修复它。

于 2014-01-08T14:24:07.247 回答
0

我有一个类似的错误“未定义的方法‘内容’用于...”

不知何故,我的迁移文件具有以下内容:

t.content:文本

代替

t.text:内容

看起来锡人是对的,可能你有 t.ext :description 而不是 t.text。

于 2015-04-09T16:02:45.740 回答