У меня есть несколько скриптов, которые взаимодействуют с базой данных MySQL, используя ActiveRecord, без остальной части пакета Rails (хотя у меня есть полный Rails gem). Тем не менее, попытка использовать эти классы в последнее время дала мне NoMethodError, когда я пытаюсь вызвать find() в моем классе ActiveRecord. Код класса удивительно прост:
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)
Но когда я запускаю script:
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
Не find
метод класса вместо метода экземпляра?
Довольно нормально, если объекты active_record не имеют метода find (если в соответствующей таблице в базе данных не содержится столбец "find", но тогда этот метод не принимает никаких аргументов).
Я думаю, вы хотите сделать li = LineItem.find(1)
Вы можете использовать метод find только с данными, которые уже находятся в базе данных, не с объектом пустой ActiveRecord, подобным тому, который указан в вашем примере.