Вот что происходит в моем приложении:рельсы проверки перед действием
- клиент вводит номер телефона
- телефонный номер ищется в модели клиента, чтобы увидеть, если она существует
- , если она действительно существует, перейдите к клиент показать страницу
- , если он не существует, перейдите на новую страницу клиента для создания нового клиента
по моему understandi ng, проверка модели выполняется для данных, которые вводятся/редактируются/удаляются в базу данных.
Однако, как мы можем проверить (использовать проверку) перед любыми поисками в базе данных? И если это неверно (например: используя буквы вместо цифр для номера телефона), тогда появится ошибка.
Я реализует опцию ввода 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 %>