Как добавить валидацию в контактную форму? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь добавить контактную форму для заполнения пользователями, и она автоматически отправит электронное письмо на основной счет. Я не уверен, как добавить проверку в форму, чтобы пользователи не могли нажимать «Отправить письмо», не заполнив поля.

В настоящее время я пытался добавить Website: <input type="url" name="website" required>

приложение / просмотров / contact_mailer / contact_email.html.erb:

<!DOCTYPE html>
<html>
  <head>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
  </head>
  <body>
    <h1>Contact Us Form</h1>
    <p>
      From: <%= @params['name'] %>
    </p>
    <p>
      Email: <%= @params['email'] %>
    </p>
    <p>
      Message: <%= @params['message'] %>
    </p>
  </body>
</html>

Контактная форма:

<h1>Any enquiries:</h1>
<center><form name="htmlform" method="get" action="/pages/send_form">
<table width="700px">



<form id="contact_form" action="#" method="POST" enctype="multipart/form-data">

  <div class="row">
    <label for="name">Your Name:</label><br />
    <input id="name" class="input" name="name" type="text" value="" size="30" /><br />
  </div>

  <div class="row">
    <label for="email">Your Email:</label><br />
    <input id="email" class="input" name="email" type="text" value="" size="30" /><br />
  </div>

  <div class="row">
    <label for="message">Your Message:</label><br />
    <textarea id="message" class="input" name="message" rows="7" cols="30"></textarea><br />
  </div>
  <input id="submit_button" type="submit" value="Send email" />

</form> 

В настоящее время электронное письмо по-прежнему отправляется на учетную запись без проверки, например «Вы должны заполнить это поле»

Ответы [ 3 ]

0 голосов
/ 24 апреля 2019

Не могли бы вы использовать атрибуты HTML-формы?Существует обязательный атрибут, поэтому пользователь не может оставить поле пустым.например,

<input required id="email" class="input" name="email" type="email" value="" size="30"  />

вы также можете использовать type = "email", и это обеспечит правильное форматирование.

(https://www.w3schools.com/html/html_form_attributes.asp)

0 голосов
/ 24 апреля 2019

Глядя на код вашей формы, я вижу несколько проблем:

  • у вас есть 2 <form> отверстия
  • я не вижу никаких file входов, поэтому вам не нужно enctype="multipart/form-data"

вот исправленный код (я удалил первый элемент формы, я настроил action второй формы, я добавил required атрибуты к входам и текстовой области, и я обновил электронную почту введите тип «email», чтобы убедиться, что вводятся только действительные электронные письма Добавление required должно вынудить современные браузеры запретить отправку форм, если данные не заполнены правильно.

<h1>Any enquiries:</h1>
<center>
<table width="700px">



<form id="contact_form" action="/pages/send_form" method="POST">

  <div class="row">
    <label for="name">Your Name:</label><br />
    <input id="name" class="input" name="name" type="text" value="" size="30" required /><br />
  </div>

  <div class="row">
    <label for="email">Your Email:</label><br />
    <input id="email" class="input" name="email" type="email" value="" size="30" required /><br />
  </div>

  <div class="row">
    <label for="message">Your Message:</label><br />
    <textarea id="message" class="input" name="message" rows="7" cols="30" required></textarea><br />
  </div>
  <input id="submit_button" type="submit" value="Send email" />

</form> 
0 голосов
/ 24 апреля 2019

Создайте модель для вашего контактного сообщения.Что-то вроде:

class ContactEmail
  attr_accessor :name, :email, message
end

Затем include ActiveModel::Model, чтобы получить подтверждение ActiveModel и сообщить модели, какие поля проверять, например:

class ContactEmail
  include ActiveModel::Model
  attr_accessor :name, :email, message
  validates :name, :email, message, presence: true
end

Наконец, в действии контроллера создайте новыйОбратитесь по электронной почте с данными формы и вызовите метод предиката valid?.И используйте flash, чтобы добавить сообщение об ошибке.

new_mail = ContactEmail.new(params['name'], params['email'], params['message'])
if new_mail.valid?
  ...
else
  flash.now[:error] = new_mail.errors.full_messages
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...