2010-10-07 76 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

相关问题