Ruby(不是Rails)在使用find()时给出NoMethodError

时间:2009-09-28 18:25:53

标签: mysql ruby activerecord osx-snow-leopard

我有几个脚本使用ActiveRecord与MySQL数据库交互而没有其他Rails包(尽管我安装了完整的Rails gem)。但是,当我尝试在ActiveRecord-descended类上调用find()时,最近尝试使用这些类已经给了我NoMethodError。 类代码非常基础:

class LineItem <ActiveRecord::Base
   set_primary_key 'id'
   set_table_name  "line_items"
end

是的,因为我使用的是MySQL数据库,所以我有一个db连接器文件:

require 'rubygems'
require 'active_record'
require 'logger'
ActiveRecord::Base.establish_connection(
  :adapter =>'mysql',
  :database=>'my_db',
  :username=>'my_user',
  :password=>'a_password',
  :host=>"ip_address",
  :port=>3306
)
ActiveRecord::Base.logger = Logger.new(STDERR) 

但是当我运行脚本时:

require "dbconn"
require "lineitem"

li = LineItem.new()
li.find(1)

我收到错误:

NoMethodError: undefined method `find' for #<LineItem id: nil, trans_id: nil, trans_code: nil, data: nil>
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/attribute_methods.rb:260:in `method_missing'
from (irb):4

如果有人有任何建议我会很感激。我在OSX 10.6.1上使用Ruby 1.8.7是的,它在10.5.x上运行良好

3 个答案:

答案 0 :(得分:5)

find不是类方法而不是实例方法吗?

答案 1 :(得分:1)

您只能将find方法用于数据库中已有的数据,而不是 ActiveRecord对象,如示例所示。

答案 2 :(得分:1)

active_record对象没有find方法是很正常的(除非数据库中的对应表有一个“find”列,但那个方法不会带任何参数)。

我认为你想做li = LineItem.find(1)