以下是我的应用中发生的情况:
根据我的理解,模型验证适用于输入/编辑/删除到数据库中的数据。
但是,如何在数据库中进行任何搜索之前检查(使用验证)?如果不正确(例如:使用字母而不是电话号码的数字),那么会显示错误。
我正在实施html表单输入选项,以防止有人在电话号码输入框中输入字母,如下所示:
<%= form_tag(new_customer_path, method: :get) do %>
<%= telephone_field_tag :phone, nil, placeholder: "Phone Number", required: true, pattern: "[0-9]{10}", title: "Number must be 10 digits", maxlength: "10", class: "input-lg" %>
<%= submit_tag "Enter", class: "btn btn-primary btn-lg" %>
<% end %>
然而,我的表格变得越来越大,因为我会在所有内容(手机,邮政编码,电子邮件等)上放置html表格输入框选项。
什么是更合适的“Rails”方式?使用活动记录验证来显示错误,或提供html表单输入选项以预先验证数据?或者它是两者的组合(最大安全?客户端和数据库之前)?
模型
class Customer < ActiveRecord::Base
validates_presence_of :first_name, :last_name, :phone, :email, :zip_code
validates_uniqueness_of :phone, :email
validates :phone, :zip_code, :numericality => {:only_integer => true}
validates_length_of :phone, is: 10
validates_length_of :zip_code, is: 5
end
控制器
def new
if @customer = Customer.find_by(phone: params[:phone])
flash[:success] = "Welcome back"
redirect_to @customer
else
@customer = Customer.new(phone: params[:phone])
flash.now[:warning] = "Customer not found, please sign up!"
end
end
错误消息部分
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>">
<a href="#" data-dismiss="alert" class="close">×</a>
<ul>
<li>
<p><%= value %></p>
</li>
</ul>
</div>
<% end %>
答案 0 :(得分:0)
rails验证可能已经足够好但如果你担心它,你可以在客户端添加javascript验证。如果您想在客户端进行表单验证,或者您可以编写自己的插件,可以使用多个插件。这可能会有所帮助:http://www.tutorialspoint.com/javascript/javascript_form_validations.htm
答案 1 :(得分:0)
只需使用JavaScript和HTML添加前端验证即可。你的Rails验证看起来很好。
Html:required
属性。
Jquery:查看此链接 - http://jqueryvalidation.org/