2016-03-07 4 views
0

Вот что происходит в моем приложении:рельсы проверки перед действием

  • клиент вводит номер телефона
  • телефонный номер ищется в модели клиента, чтобы увидеть, если она существует
  • , если она действительно существует, перейдите к клиент показать страницу
  • , если он не существует, перейдите на новую страницу клиента для создания нового клиента

по моему 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 %> 

ответ

0

Проверка рельсов, вероятно, достаточно хорошо, но если вы беспокоитесь об этом вы можете добавить проверка JavaScript на стороне клиента. Существует несколько плагинов, которые вы могли бы использовать, если хотите выполнить проверку валидации на стороне клиента, или вы можете написать свой собственный. Это может быть полезно: http://www.tutorialspoint.com/javascript/javascript_form_validations.htm

0

Просто добавьте проверки переднего конца с помощью JavaScript и HTML. Ваши проверки Rails выглядят отлично.

Html: required атрибут.

JQuery: Посмотрите эту ссылку - http://jqueryvalidation.org/

Смежные вопросы