【问题标题】:Problems with migration, "undefined method `ext'" in Active Record?迁移问题,Active Record 中的“未定义方法 `ext'”?
【发布时间】:2014-01-26 15:38:19
【问题描述】:

我用 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 很陌生,不知道如何解决这个错误。我该如何解决这个问题?非常感谢!

【问题讨论】:

  • 您能添加完整的堆栈跟踪和/或迁移代码吗?
  • 嗨,刚刚添加了完整的跟踪。
  • 我们也能看到迁移吗?
  • 看起来像是错字,可能是ext 而不是text

标签: ruby-on-rails ruby ruby-on-rails-3 migrate railsinstaller


【解决方案1】:

我遇到了类似的错误“未定义的方法 `content' for...”

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

t.content :文本

而不是

t.text :内容

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

【讨论】:

    【解决方案2】:

    您在此文件中似乎有错误:

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

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

    An error has occurred, this and all later migrations canceled:
    
    undefined method `ext'   
    

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

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

    【讨论】:

      【解决方案3】:

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

      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
      

      【讨论】:

      • 对不起我的英语。这对我来说不是原生的。谢谢,伙计
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 2023-03-14
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多