【问题标题】:Ruby (not Rails) giving a NoMethodError when using find()Ruby(不是 Rails)在使用 find() 时给出 NoMethodError
【发布时间】:2009-09-28 18:25:53
【问题描述】:

我有几个使用 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 上运行良好

【问题讨论】:

    标签: mysql ruby activerecord osx-snow-leopard


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您只能对数据库中已有的数据使用 find 方法,而不是像您的示例中那样使用 empty ActiveRecord 对象。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-02
          • 1970-01-01
          • 1970-01-01
          • 2013-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多