私は単純な1ページの連絡フォームに取り組んでいます。連絡先モデルには、電話と電子メールという2つの属性があります。電子メールはバックエンドで検証する必要があります(私は自分のモデルでそれを行いました)。しかし、ユーザーは連絡フォームに電子メールまたは電話のいずれかを記入して送信することができます。必要な電子メールフィールドがなく、私はそれをオプションにする方法を知らない。バックエンド(Rails)で電子メールを検証し、このフィールドをフォームに入力しないようにするにはどうすればよいですか?
contact.rb
class Contact < MailForm::Base
attribute :phone
attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i,
presence: false
def headers
{
:subject => "My Contact Form",
:to => "[email protected]",
:from => %("#{phone}" <#{email}>)
}
end
端
contacts_controller.rb
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(contact_params)
@contact.request = request
if @contact.deliver
flash.now[:notice] = 'Ваша заявка принята!'
render :new
else
flash.now[:notice] = 'Введите корректный email.'
render :new
end
end
private
def contact_params
params.require(:contact).permit(:phone, :email)
end
end
new.html.erb
<%= simple_form_for @contact, html: {class: 'form-inline'} do |f| %>
<div class="form-group">
<div class="col-sm-6">
<%= f.input_field :email, class: "form-control", placeholder: "email", required: false %>
</div>
</div>
<div class="form-group">
<div class="col-sm-6">
<%= f.input_field :phone, class: "form-control", placeholder: "+7 (095) 123-45-67" %>
</div>
</div>
<div class="form-group">
<div class="col-sm-6">
<%= f.button :submit, 'Submit', :class=> "btn btn-success" %>
</div>
</div>
<div class="form-group">
<div class="col-sm-12">
<% flash.each do |key, value| %>
<div class="alert alert-info" role="alert">
<div class="alert alert-<%= key %>"><%= value %></div>
</div>
<% end %>
</div>
</div>
<% end %>
これは1が合格するために必要されている間、ユーザは、電話または電子メールを入力することができますいずれかを意味していますか?または、電子メールが存在する場合はその電子メールを検証したいだけですか? – oreoluwa