2010-01-16 2 views
4

나는 정말로 정말로 붙어있어이 바로 지금 짜증이납니다.잘못된 인수 수 (2에 대해 1) - 레일

나는 레일을 실행하고 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 
을3210

그래서 프런트 엔드에서 두 개의 필드를 입력하고 DB에 저장하려고합니다. 그러나, 나는 내 페이지를로드 할 때마다 나에게 오류를 제공합니다 :

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 멋진 대답 + 배경 –

+1

멋진 대답 아래로 응축 될 수있다. 지금 나는 나의 마지막 시간을 뒤로 원한다 – Omnipresent

1

빠른 수정이에 라인 3pages_controller의를 변경하는 것입니다 : keys 적절한 레일없이

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

은 통과하고 어떤 순서로하는 값 무슨 생각이 없습니다.

더 큰 문제는 양식이 올바르게 설정되지 않은 것 같습니다. 그럴만 한 이유가 있을지 모르지만, 그렇지 않다면 공백의 Rails 프로젝트를 만들고 generate scaffold을 사용하여 일반 Rails 양식/컨트롤러가 어떻게 설정되었는지 확인하는 것이 좋습니다.

+0

예 나는 단지 그것으로 놀고 있었다. 자세한 정보를 피하기 위해 양식에서 일부 항목을 제거했습니다. 나는 스 캐 폴딩을 좋아하지 않는다. 나는 AWDR 책이 6 장까지 발판을 사용하고 있다고 믿을 수 없었다! – Omnipresent

0

new은 해시를 취하는데 해시가 해당 키가있는 위치에 속성이 설정되므로 Customer.new(params)으로 충분해야하지 않습니까? params에도이 경우 설정하고 싶지 않은 속성의 키가 없다면, 나는 생각합니다.

분명히 샘플 코드는 더 나은 존재하는 문제에 대한 편집 다운되었을 수도 있지만, 같이 #new/# save 쌍은 일반적으로 Customer#create(params)