0

Railsパッケージの残りの部分なしでActiveRecordを使用してMySQLデータベースと対話するスクリプトがいくつかあります(完全なRails gemがインストールされていますが)。ただし、最近これらのクラスを使用しようとすると、ActiveRecordの子孫クラスで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

誰かアドバイスがあれば教えていただければ幸いです。OSX10.6.1でRuby1.8.7を使用していますはい、10.5.xで正常に動作しました

4

3 に答える 3

5

findインスタンスメソッドじゃなくてクラスメソッドじゃないの?

于 2009-09-28T18:31:16.680 に答える
1

find メソッドは、例のような空のActiveRecord オブジェクトではなく、データベースに既に存在するデータでのみ使用できます。

于 2009-09-28T18:35:13.617 に答える
1

active_record オブジェクトが find メソッドを持たないのはごく普通のことです (データベース内の対応するテーブルに "find" 列があり、そのメソッドが引数を取らない場合を除きます)。

やりたいと思うli = LineItem.find(1)

于 2009-09-28T18:39:53.637 に答える