2010-08-24 1 views
1

Вот мой тест код модели:неправильно # аргументов (0 для 1)

require 'rubygems' 
require 'composite_primary_keys' 
class VamTest < ActiveRecord::Base 
    set_table_name 'tests' 
    set_primary_keys :service, :host 
end 

Это StackTrace я получаю, когда я бегу следующее:

>> VamTest.all 
VamTest.all 
ArgumentError: wrong # of arguments(0 for 1) 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1:in `class_eval' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2232:in `compute_type' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/core_ext/kernel/reporting.rb:11:in `silence_warnings' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2230:in `compute_type' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1665:in `instantiate' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:664:in `find_by_sql' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:664:in `collect!' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:664:in `find_by_sql' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1578:in `find_every' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:618:in `find' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:638:in `all' 
    from (irb):2 
>> 

проверьте следующее:

>> VamTest.find(:first) 
VamTest.find(:first) 
ArgumentError: wrong # of arguments(0 for 2) 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1:in `class_eval' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2232:in `compute_type' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/core_ext/kernel/reporting.rb:11:in `silence_warnings' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2230:in `compute_type' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1665:in `instantiate' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:664:in `find_by_sql' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:664:in `collect!' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:664:in `find_by_sql' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1578:in `find_every' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1535:in `find_initial' 
    from C:/jruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:616:in `find' 
    from (irb):31 
>> 

У меня возникает ощущение, что в моей модели есть проблема с определением первичного ключа, но я не могу понять это.

+0

который является внешним ключом, услугой или хостом? –

+0

хороший вопрос Jed. Вчера я понял, что при использовании составных клавиш это означает, что это комбинированный ключ, где один или оба поля являются первичным ключом к другому объекту/модели (поэтому он является внешним ключом). В моем случае модель VamTest не имеет внешнего ключа. Первичный ключ этой модели состоит из двух полей: службы и хоста. смысл? – Rafael

ответ

0

У меня есть подозрение, что назвать вашу модель Test является источником неприятностей. Откройте консоль и введите Test. Если на самом деле вы найдете свою модель, вы увидите что-то подобное.

=> Testid: integer, service: string, host: string, created_at: datetime, updated_at: datetime

Хотя, я думаю, что вы будете видеть вместо этого:

=> Test

Изменить одноразовая модель на что-то вроде Foo и посмотреть, как это происходит.

+0

JLD, Я пытался вводить тест в консоль без успеха, как в я получил то, что вы уже догадались: => Test Так я пошел вперед и изменил название модели, которая работала! Но затем, когда я попробовал newModelName.find (: all), я получил ту же исходную ошибку, что и при попытке Test.find (: all) – Rafael

+0

Не могли бы вы отредактировать свой вопрос, включив свою новую модель, и консольный вывод, который вы видят? – jdl

+0

Я только что обновил свой вопрос – Rafael