Ruby (не Rails) выдает NoMethodError при использовании find()

У меня есть пара скриптов, которые взаимодействуют с базой данных MySQL с помощью ActiveRecord без остальной части пакета Rails (хотя у меня установлен полный гем Rails). Однако попытки использовать эти классы в последнее время приводили к ошибке NoMethodError при попытке вызвать find() в моем классе, потомке ActiveRecord.
Код класса удивительно простой:

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

И да, поскольку я использую базу данных MySQL, у меня есть файл соединителя базы данных:

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

Если у кого-нибудь есть какие-либо советы, я был бы признателен. Я использую Ruby 1.8.7 на OSX 10.6.1 Да, на 10.5.x все работало нормально


person NateD    schedule 28.09.2009    source источник


Ответы (3)


Разве find не метод класса, а не метод экземпляра?

person hrnt    schedule 28.09.2009

Вы можете использовать метод find только с данными, которые уже есть в базе данных, а не с пустым объектом ActiveRecord, как в вашем примере.

person Kieran Hayes    schedule 28.09.2009

Вполне нормально, что объекты active_record не имеют метода поиска (если только соответствующая таблица в базе данных не имеет столбца «найти», но тогда этот метод не будет принимать никаких аргументов).

Я думаю, ты хочешь сделать li = LineItem.find(1)

person sepp2k    schedule 28.09.2009