«Неверное количество аргументов (1 для 0)» в действии «создать» - PullRequest
0 голосов
/ 08 октября 2010

Итак, для тех, кто получает подобное сообщение, основной ответ на вопрос: «Почему я получаю эту ошибку?»вопрос в том, что где-то вы указываете неправильное количество аргументов для метода, независимо от того, насколько сомнительным или неправильным вы считаете это - это почти наверняка опечатка в вашем коде где-то.Ниже приведен только один случай, с которым я столкнулся.


У меня есть функциональный тест с ошибками в следующем методе, в котором говорится, что первый оператор «Quality.create! (...» имеетмного аргументов, которые не имеют никакого смысла для меня.

Запуск Ruby 1.8, Rails 2.3.5

    def reset_quality_lut
      Quality.delete_all

      Quality.create!(:value => 1, :name => "Scrap",      :extended_name => " (only good for parts)"   )
      Quality.create!(:value => 2, :name => "Heavy use",  :extended_name => " (needs work)"            )
      Quality.create!(:value => 3, :name => "Medium use", :extended_name => " (some functional damage)")
      Quality.create!(:value => 4, :name => "Light use",  :extended_name => " (cosmetic damage only)"  )
      Quality.create!(:value => 5, :name => "New",        :extended_name => " (or like new)"           )
      Quality.create!(:value => 0, :name => "Any",        :extended_name => "/all"                     )
    end

Что метод должен сделать, это удалить, а затемзаново создайте все значения в этой таблице.

Вот запрошенная трассировка стека (обратите внимание, что я получаю то же самое, если заменяю '.create' на '.new (....).save ':

  1) Error:
test_should_create_an_admin_user_on_app_setup(SetupControllerTest):
ArgumentError: wrong number of arguments (1 for 0)
    app/controllers/setup_controller.rb:43:in `reset_quality_lut'
    app/controllers/setup_controller.rb:23:in `create'
    /test/functional/setup_controller_test.rb:78:in `test_should_create_an_admin_user'

В приложении этот контроллер позволяет настроить приложение после начальной настройки. Итак ...

www.myapp.com / setup / new

Приносит вас на страницу, где вы вводите имя пользователя и пароль для первого администратора. Когда это успешно, это действие становится недоступным, пока в базе данных есть 1 пользователь администратора.Если я попробую «Quality.new.save», я получу ошибку «ноль». Кажется, мой «новый» метод возвращает ноль по какой-то странной причине.

1 Ответ

1 голос
/ 08 октября 2010

Метод create!, безусловно, должен работать нормально, как вы его использовали.Есть ли вероятность, что что-то еще определило метод create! в классе Quality?Или действительно во всех модельных классах.

Либо это, либо может быть конфликт между двумя Quality классами (я понимаю, что ваш Quality класс является подклассом ActiveRecord::Base).

...