我现在真的感到非常困惑和烦恼。
我正在运行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'
奇怪的是,当我使用沙盒脚本/控制台时,我能够很好地插入数据。
这里发生了什么?请有人解释一下!
答案 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)