2010-10-07 75 views
0

因此,對於那些得到這樣的消息的人來說,「爲什麼我會收到此錯誤?」的基本答案。問題在於某個地方你指定了一個方法的錯誤數量的參數,不管你認爲這是多麼模糊或者錯誤 - 在你的代碼中幾乎肯定是一個錯字。下面是我碰到的一個案例。「創建」動作中的「參數數量錯誤(1代表0)」


我有以下方法誤差的功能測試,他說,第一個「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 

什麼方法是應該做的是刪除,然後在該表中重新創建所有的值。

這裏請求ED堆跟蹤(請注意,我得到同樣的事情,如果我有取代「.create「新(....)保存」:

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」,我得到一個零錯誤。似乎我的「新」方法返回零由於一些奇怪的原因。

+0

FWIW,除非你明確地使用'.create!'出於驗證的原因,只需使用'.create'。 – mway 2010-10-07 21:23:38

+1

您的方法的前四行可以用'Quality.delete_all'替換。更短,更快。 – 2010-10-07 23:53:04

+0

請發佈堆棧跟蹤。 – jdl 2010-10-08 00:57:03

回答

1

create!方法當然應該像您使用過的那樣正常工作。是否有其他方法可以在Quality類中定義create!方法?或者確實在所有的模型類上。

這兩個Quality類之間可能存在衝突(我認爲你的Quality類是ActiveRecord::Base子類)。

+0

我做了一個搜索項目中的所有代碼,並且沒有「def create!」引用。 – jefflunt 2010-10-08 14:15:20

+0

是的,類定義以「class Quality jefflunt 2010-10-08 16:34:41

+0

我稍微修改了我的代碼以測試您的理論。在我的測試代碼中,我將第一個「Quality.create(...)」調用替換爲「Quality.new(...)。save」),並且我得到相同的錯誤消息,但是使用「new」而不是「創建「 – jefflunt 2010-10-08 16:51:05

相關問題