2010-01-16 4 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 Великого ответа + фон –

+1

удивительный ответ. теперь я хочу, чтобы мой последний час вернулся – Omnipresent

1

Быстрое исправление для изменения линии 3 из pages_controller к этому:

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

Без надлежащего keys Rails понятия не имеет, какие ценности вы передаете и в каком порядке.

Большая проблема заключается в том, что ваша форма не настроена должным образом. У вас может быть большая причина для этого, но если нет, я бы рекомендовал создать пустой проект Rails и использовать generate scaffold, чтобы узнать, как настроена нормальная форма/контроллер Rails.

+0

Да, я просто играл с ним. и удалили некоторые вещи из формы, чтобы избежать подробностей. Мне не нравятся строительные леса. Я не мог поверить, что AWDR-книга использует строительные леса вплоть до шестой главы! – Omnipresent

0

С new берет хэш, из которого будут установлены атрибуты, где у хэша есть соответствующие клавиши, должно быть достаточно Customer.new(params), не так ли? Если параметры не имеют ключей для атрибутов, которые вы не хотите устанавливать в этом случае, я полагаю.

Очевидно ваш пример кода может быть отредактирован вниз, чтобы лучше представить проблему, но, как показано, пара #new/# save обычно может быть сжата до Customer#create(params)

Смежные вопросы