当用户错误地填写表单/遗漏了一些内容时,我如何通过ruby on rails上的JS显示错误消息
When a user fills a form wrongly/misses something how do I show an error message through JS on ruby on rails?
我的应用程序中有一个表单(标准填写姓名、姓氏、电子邮件),我想知道如果用户错过了一个部分/没有正确填写,如何显示错误消息。我的验证是,这些部分都不能是空白的。我主要不确定如何将控制器连接到JS文件以调用错误消息,或者是否有更好的方法。
我的HTML:
<%= form_for @contestant, :html => {:multipart => true} do |f| %>
<div class="form-group">
<label for="name">Name:</label>
<input type="name" class="form-control" id="name" placeholder="Name">
</div>
<div class="form-group">
<label for="surname">Surname:</label>
<input type="surname" class="form-control" id="surname" placeholder="Surname">
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" class="form-control" id="email" placeholder="example@gmail.com">
</div>
<% end %>
这是控制器:
class ContestantsController < ApplicationController
def new
@contestant = Contestant.new
end
def create
@contestant = Contestant.new(contestant_params)
if @contestant.errors.any?
#I don't know how to connect with the JS section?
else
#I don't know how to connect with the JS section?
end
end
private
def contestant_params
params.require(:contestant).permit(:name, :surname, :email)
end
end
有几种方法可以实现这一点。
进行一些基本的客户端验证检查,例如检查所需字段、所需格式等。这将是项目的assets/javascripts文件夹中的一个js文件。但是,您也应该在后端执行验证。
另一种方法是使用ajax提交表单。只需在表单的行中添加remote:true
<%= form_for @contestant, :remote => true, :html => {:multipart => true} do |f| %>
在控制器中,您将需要一个respons_to块来处理ajax请求。
respond_to do |format| if @contestant.save format.html { redirect_to @contestant, notice: 'Contestant could not be created.' } format.js {} format.json { render json: @contestant} else format.html { render action: "new" } format.json { render json: @contestant.errors } end end
这里有很多信息。
在rails中,您可以使用client_side_validation gem,它将选择模型验证并将其应用于front_end验证。
在Gemfile 中包含ClientSideValidations
gem 'client_side_validations'
然后运行安装生成器
rails g client_side_validations:install
将此添加到application.js
//= require rails.validations
并将表单用作
<%= form_for @user, validate: true do |f| %>
这将为您管理客户端验证。以下是gem github页面的链接,您可以查看该页面以了解更多选项client_side_validation_rails
在rails中,您使用ActiveModel::Validators
来验证您的模型。
所以你的代码应该是这样的:
class Contestant
validates_presence_of :name, :surname, :email
end
现在,在您的控制器中,您可以执行以下操作:
def create
@contestant = Contestant.new(contestant_params)
if @contestant.save
redirect_to @contestant
else
render :new
end
end
在您看来:
<%= form_for @contestant %>
<% if @contestant.errors.any? %>
<div id="error_explanation">
<ul>
<% @contestant.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<% end %>
对于像presence
这样的简单验证,您可能不想使用任何gem或javascript代码,一种方法是在所需属性上设置html属性required=true
。
相关文章:
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 克服错误的更优雅的方法是什么:需要对象说明符.当通过JXA通过Messages发送SMS时,参数没有对象说明符
- 为什么jqPlot显示了一个错误的饼图,其中包含通过AJAX检索的数据
- 通过AJAX发送文件返回'blob'错误
- 通过 AJAX 检索 Blob 时处理错误消息
- 通过 Ajax 向 PHP 发送错误的数据
- CSS 大小相互依赖和在 Chrome 中通过 JS 调整大小:可能的错误
- Chai 期望 [函数] 抛出一个(错误)未通过测试(使用 Node)
- 保存通过Ajax返回的信息后出现$_POST错误
- Jquery通过媒体查询切换窗口大小的错误
- 通过AJAX访问时,$_POST中出现未定义的索引错误
- Firefox 14.0.1在读取通过AJAX发送的JSON文件时返回错误
- 谷歌自定义搜索结果通过代理显示错误
- Javascript/Amazon s3-通过threejs加载Javascript文件时出现访问控制源错误
- 可能未处理通过测试时出现错误
- 未捕获的语法错误:意外的标记:-数据仍在通过
- CORS预检请求错误无法通过安装npm cors软件包解决
- 什么'这个异步JavaScript函数的单元测试是错误的(通过Mocha/Sinon)
- 未捕获的ReferenceError: $是未定义的错误,通过Node模块访问
- 错误循环通过Ajax (JSON)响应