2010-01-16 83 views
4

我现在真的很困惑,并且很恼火。错误的参数数量(2为1) - Rails

我运行的Rails 2.3.5

View/pages/customers.html.erb只是有:

<% form_tag do %> 
    First Name 
     <%= text_field_tag :firstName, params[:firstName] %> 
    Last Name 
     <%= text_field_tag :lastName, params[:lastName] %> 

     <%= submit_tag "Enter" %> 
<%end%> 

Models/customer.rb只是有:

class Customer < ActiveRecord::Base 
    attr_accessible :firstName, :lastName 
end 

Controller/pages_controller

class PagesController < ApplicationController 
    def custs 
    @cust = Customer.new(params[:firstName], params[:lastName]) 
    @cust.save 
    end 
end 

就像你看到的,我只是试图从前端输入两个字段,然后将它们保存到数据库中。然而,每当我加载我的网页它给我的错误:

wrong number of arguments (2 for 1) pages_controller.rb:3:in new' pages_controller.rb:3:in custs'

奇怪的是,当我使用沙箱脚本/控制台我能插入数据的罚款。

这是怎么回事?请有人解释一下!

回答

7

http://apidock.com/rails/ActiveRecord/Base/new/class这里是新功能的一点解释。关键部分 - “传递一个与关联的表列名称匹配的键名的哈希”。而不是@cust = Customer.new(params[:firstName], params[:lastName])你应该有@cust = Customer.new(:firstName => params[:firstName], :lastName => params[:lastName])。这应该做的伎俩。

+0

+1大答案+背景 – 2010-01-16 08:04:30

+1

真棒答案。现在我想要我的最后一个小时回来 – Omnipresent 2010-01-16 08:06:12

1

快速修复方法就是改变线3pages_controller的这样:

​​

如果没有适当的keys Rails有不知道是什么值要传递和以什么顺序。

更大的问题似乎是,你的表格是不是正确安装。您可能有一个很好的理由,但如果不是,我会建议创建一个空白的Rails项目,并使用generate scaffold来查看如何设置普通的Rails窗体/控制器。

+0

是的,我只是在玩它。并从表格中删除一些东西以避免冗长。我不喜欢脚手架。我无法相信,AWDR书籍一直使用脚手架来支持第6章! – Omnipresent 2010-01-16 08:09:00

0

由于new需要一个散列,从哪个属性将被设置在散列有相应的键的地方,Customer.new(params)应该足够了,不是吗?我猜想,除非params也有属性的关键字,否则你不想在这种情况下设置属性。

显然示例代码可能已经编辑下更好地反映问题,但如图所示,#new /#save对通常可以降低冷凝成Customer#create(params)

相关问题