错误的参数数量(2表示1) - Rails

时间:2010-01-16 07:53:47

标签: ruby-on-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

因此,您看到我只是尝试从前端输入两个字段,然后将它们保存到数据库中。但是,每当我加载页面时,它都会给我错误:

  

错误的参数数量(2对1)   pages_controller.rb:3:在new' pages_controller.rb:3:in custs'

奇怪的是,当我使用沙盒脚本/控制台时,我能够很好地插入数据。

这里发生了什么?请有人解释一下!

3 个答案:

答案 0 :(得分: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])。这应该可以解决问题。

答案 1 :(得分:1)

快速解决方法是将3的第pages_controller行更改为:

@cust = Customer.new({:firstName => params[:firstName], :lastName => params[:lastName]})

没有正确的keys Rails不知道你传递的是什么值以及以什么顺序传递。

更大的问题似乎是您的表单设置不正确。您可能有很好的理由,但如果没有,我建议创建一个空白的Rails项目,并使用generate scaffold查看如何设置正常的Rails表单/控制器。

答案 2 :(得分:0)

由于new采用散列,从中设置哈希具有相应键的属性,Customer.new(params)应该足够了,不是吗?除非params还有你不想设置的属性键,我猜想。

显然,您的示例代码可能已被修改以更好地呈现问题,但如图所示,#new /#save对通常可以缩减为Customer#create(params)