开发者

wrong number of arguments (2 for 1) - Rails

I am really really stuck and annoyed with this right now.

I am running Rails 2.3.5

My View/pages/customers.html.erb simply has:

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

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

My Models/customer.rb simply has:

class C开发者_运维问答ustomer < ActiveRecord::Base
    attr_accessible :firstName, :lastName
end

My Controller/pages_controller has

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

so as you see I am just trying to enter two fields from front end and then save them to the DB. However, whenever i load my page it give me error:

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

weird thing is that when I use the sandbox script/console I am able to insert data fine.

What is going on here? please someone explain!


http://apidock.com/rails/ActiveRecord/Base/new/class here is a little explanation of the new function. The crucial part - "pass a hash with key names matching the associated table column name". Instead of @cust = Customer.new(params[:firstName], params[:lastName]) you should have @cust = Customer.new(:firstName => params[:firstName], :lastName => params[:lastName]). This should do the trick.


The quick fix is to change line 3 of pages_controller to this:

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

Without proper keys Rails has no idea what values you are passing and in what order.

The bigger problem seems to be that your form is not setup properly. You might have a great reason for it, but if not, I would recommend creating a blank Rails project, and using generate scaffold to see how a normal Rails form/controller is setup.


Since new takes a hash, from which attributes will be set where the hash has the corresponding keys, Customer.new(params) should be sufficient, shouldn't it? Unless params also has keys for attributes that you don't want to be set in this case, I suppose.

Obviously your sample code may have been edited-down to better present the problem, but as shown, the #new/#save pair can usually be condensed down to Customer#create(params)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜