请帮我解决以下错误。
错误:
ActionController::ParameterMissing in CustmersController#create
param is missing or the value is empty: users
当我提交数据时,此错误即将发生。
我的代码如下
视图/ custmers / new.html.erb
<h1>Enter your data here</h1>
<center>
<%= form_for @users,:url => {:action => 'create'} do |f| %>
<% if @users.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@users.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @users.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<label for="name">Name:</label>
<%= f.text_field :name,placeholder:"Enter your name",:class => "input-field" %>
</p>
<p>
<label for="email">Email:</label>
<%= f.email_field :email,placeholder:"Enter your email",:class => "input-field" %>
</p>
<p>
<label for="phone">Phone no:</label>
<%= f.telephone_field :phoneno,placeholder:"Enter your phone number",:class => "input-field" %>
</p>
<p>
<%= f.submit "Submit" %>
</p>
<% end %>
<%= link_to "BACK",custmers_index_path %>
</center>
控制器/ custmers_controller.rb
class CustmersController < ApplicationController
def index
end
def new
@users=Custmer.new
end
def show
end
def create
@users=Custmer.new(user_params)
if @users.save
flash[:notice]="You have signed up successpully"
flash[:color]="valid"
redirect_to :action => 'index'
else
flash[:alert]="You have not signed up successfully"
flash[:color]="invalid"
render :new
end
end
private
def user_params
params.require(:users).permit(:name,:email,:phoneno)
end
end
模型/ custmer.rb
class Custmer < ActiveRecord::Base
EMAIL_REGEX = /\A[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\z/i
validates :name,presence:true,length: { minimum: 5 }
validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX
validates :phoneno, presence: true,length: {minimum: 10}
end
我使用的是rails版本4.2.0和ruby版本1.9.3。请帮我解决此错误。
答案 0 :(得分:1)
如果查看伴随错误的堆栈跟踪,您可以确切地知道问题所在 - 查找堆栈跟踪中引用代码的第一行(而不是库代码)。
但公平的猜测是控制器中的require(:users)
行。看起来您要么从另一个控制器复制/粘贴此代码,要么在将其作为脚手架的一部分生成后更改控制器的名称。
应该是requires(:custmer)
,因为这是您提交的内容的类别。
作为一种通用方法,您应该遵循标准的Rails实践来命名事物。如果您真的想要使用拼写错误的Custmer
类,请使用它,但在控制器和视图中使用@custmr
来引用实例,而不是@users
。