Ruby on rails &引用;查找“;在rails控制台中为my model类的实例(从ActiveRecord::Base继承)发现方法not found错误

Ruby on rails &引用;查找“;在rails控制台中为my model类的实例(从ActiveRecord::Base继承)发现方法not found错误,ruby-on-rails,Ruby On Rails,我正在尝试建立一个简单的RubyonRails项目。这是我从头开始创建的第一个RoR。我在rails控制台中测试我的模型,对于任何我尝试的方法,比如find或where,我都会得到以下错误 NoMethodError: undefined method `find' for #<MediaDb:0x00000004844780> from /home/blah/.rvm/gems/ruby-2.1.0/gems/activemodel-4.0.2/lib/active_model/a

我正在尝试建立一个简单的RubyonRails项目。这是我从头开始创建的第一个RoR。我在rails控制台中测试我的模型,对于任何我尝试的方法,比如find或where,我都会得到以下错误

NoMethodError: undefined method `find' for #<MediaDb:0x00000004844780>
from /home/blah/.rvm/gems/ruby-2.1.0/gems/activemodel-4.0.2/lib/active_model/attribute_methods.rb:439:in `method_missing'
from /home/blah/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active_record/attribute_methods.rb:155:in `method_missing'
from (irb):5
from /home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:90:in `start'
from /home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:9:in `start'
from /home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands.rb:62:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
NoMethodError:for的未定义方法“find”#
from/home/blah/.rvm/gems/ruby-2.1.0/gems/activemodel-4.0.2/lib/active_model/attribute_methods.rb:439:in'method_missing'
from/home/blah/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active\u record/attribute\u methods.rb:155:in'method\u missing'
来自(irb):5
from/home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:90:in'start'
from/home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:9:in'start'
from/home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands.rb:62:in`'
从箱子/轨道:4:in“require”
从箱子/轨道:4:in`'
第一个和第二个相同。 我遵循的步骤是

rails console --sandbox
Loading development environment in sandbox (Rails 4.0.2)
Any modifications you make will be rolled back on exit 2.1.0 :001 > MediaDb
=> MediaDb(id: integer, path: string, codec: string, dateCreated: date, timeCreated: time, country: string, state: string, city: string, gpsCoord: string, clusterTag: string, persons: text, created_at: datetime, updated_at: datetime) 
2.1.0 :002 > a = MediaDb.new()
=> #<MediaDb id: nil, path: nil, codec: nil, dateCreated: nil, timeCreated: nil,     country: nil, state: nil, city: nil, gpsCoord: nil, clusterTag: nil, persons: nil, created_at: nil, updated_at: nil> 
2.1.0 :003 > a.save(path: "test")
(0.2ms)  SAVEPOINT active_record_1
SQL (6.1ms)  INSERT INTO "media_dbs" ("created_at", "persons", "updated_at") VALUES (?, ?, ?)  [["created_at", Sun, 05 Jan 2014 05:29:48 UTC +00:00], ["persons", nil], ["updated_at", Sun, 05 Jan 2014 05:29:48 UTC +00:00]]
(0.3ms)  RELEASE SAVEPOINT active_record_1
=> true 
2.1.0 :004 > a.first
NoMethodError: undefined method `first' for #<MediaDb:0x00000004844780>
from /home/blah/.rvm/gems/ruby-2.1.0/gems/activemodel-4.0.2/lib/active_model/attribute_methods.rb:439:in `method_missing'
from /home/blah/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active_record/attribute_methods.rb:155:in `method_missing'
from (irb):4
from /home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:90:in `start'
from /home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:9:in `start'
from /home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands.rb:62:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
rails控制台——沙箱
在沙箱中加载开发环境(Rails 4.0.2)
您所做的任何修改都将在退出2.1.0:001>MediaDb时回滚
=>MediaDb(id:integer,path:string,codec:string,dateCreated:date,timeCreated:time,country:string,state:string,city:string,gpsCoord:string,clusterTag:string,persons:text,创建时间:datetime,更新时间:datetime)
2.1.0:002>a=MediaDb.new()
=> # 
2.1.0:003>a.保存(路径:“测试”)
(0.2ms)保存点活动记录1
SQL(6.1ms)插入“媒体数据库”(“创建时间”,“人员”,“更新时间”)值(?,,?)[“创建时间”,太阳,2014年1月5日05:29:48 UTC+00:00],“人员”,无],“更新时间”,太阳,2014年1月5日05:29:48 UTC+00:00]]
(0.3ms)释放保存点活动记录1
=>正确
2.1.0:004>a.首先
NoMethodError:未定义的方法“first”#
from/home/blah/.rvm/gems/ruby-2.1.0/gems/activemodel-4.0.2/lib/active_model/attribute_methods.rb:439:in'method_missing'
from/home/blah/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active\u record/attribute\u methods.rb:155:in'method\u missing'
来自(irb):4
from/home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:90:in'start'
from/home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:9:in'start'
from/home/blah/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands.rb:62:in`'
从箱子/轨道:4:in“require”
从箱子/轨道:4:in`'

我正在ubuntu服务器12.04上工作,我已经安装了rails 4.0.2。提前感谢您提供的帮助我调试此问题的任何指针。

首先
查找
,其中是类方法。这意味着您在类上调用它们,而不是在类的特定实例上调用它们。因此,您不必使用
a.first
而是使用
MediaDB.first
。您可以不使用
a.find(1)
而使用
MediaDB.find(1)
等。

首先
find
,其中
是类方法。这意味着您在类上调用它们,而不是在类的特定实例上调用它们。因此,您不必使用
a.first
而是使用
MediaDB.first
。代替
a.find(1)
您可以执行
MediaDB.find(1)
等操作。

首先
是Rails的一个
ActiveRecord::FinderMethods
,所有这些方法都在类级别上运行。但是,在您的示例中,您尝试对一个实例进行操作。这会引发一个错误–不能使用类方法对类实例进行操作:

media_db_class = MediaDb                        # An ActiveRecord class
media_db_class.methods.include?(:first)         # Does a class possess the `first` method?
#=> true                                        # Yes!

media_db_instance = MediaDb.first               # A class instance
media_db_instance.first.methods.include(:first) # Does a class instance possess the `first` method?
#=> false                                       # No

);它们是Rails ORM的一个关键组件,并且始终在类级别上运行。

首先
是Rails的
ActiveRecord::FinderMethods之一,所有这些方法都在类级别上运行。但是,在您的示例中,您尝试对一个实例进行操作。这会引发一个错误–不能使用类方法对类实例进行操作:

media_db_class = MediaDb                        # An ActiveRecord class
media_db_class.methods.include?(:first)         # Does a class possess the `first` method?
#=> true                                        # Yes!

media_db_instance = MediaDb.first               # A class instance
media_db_instance.first.methods.include(:first) # Does a class instance possess the `first` method?
#=> false                                       # No

);它们是Rails ORM的重要组成部分,并且始终在类级别上运行。

谢谢!!我不知道。谢谢!!我不知道。