Я сохраняю электронное письмо в базе данных, а затем отправляю его. Я использую модель электронной почты для проверки входов, но я не уверен, как отображать сообщения об ошибках. Я получаю неопределенный метод `errors 'для nil: ошибка NilClass для fullmessage.errors.any? линия в действии индекса (выделено ниже)Rails 4 - Сообщения об ошибках для проверки электронной почты
Посмотреть
<%= form_tag("/thank_you") do %>
<% if @fullmessage.errors.any? %> # <----- This line
<h3>Errors</h3>
<ul>
<% @fullmessage.errors.full_messages.each do |message| %> # Would also cause an error if exemption not already raised
<li><%= message %></li>
<% end %>
</ul>
<% end %>
<div class="row">
<div class="col-md-5">
<div class="form-group">
<%= text_field_tag :first_name, nil, class: 'form-control', placeholder: 'First Name' %>
</div>
</div>
<div class="col-md-7">
<div class="form-group">
<%= text_field_tag :last_name, nil, class: 'form-control', placeholder: 'Last Name' %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<%= text_field_tag :email, nil, class: 'form-control', placeholder: 'Email Address' %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group text-area-wide">
<%= text_area_tag :message, nil, class: 'form-control text-area-wide', placeholder: 'When are you available?' %>
</div>
</div>
</div>
<%= submit_tag 'Get Started', class: 'btn btn-success' %>
<p><a href="http://www.skype.com/en/" target="_blank">Skype</a> required</p>
<% end %>
Контроллер
def thank_you
@first_name = params[:first_name]
@last_name = params[:last_name]
@email = params[:email]
@message = params[:message] || "Hello!"
@fullmessage = Email.create(first_name: @first_name, last_name: @last_name, email: @email, message: @message)
if @fullmessage.valid?
ActionMailer::Base.mail(
:from => @email,
:to => '[email protected]',
:subject => "A new contact form message from #{@first_name} #{@last_name}",
:body => @message).deliver
else
redirect_to root_path
flash[:alert] = 'There was an issue with your submission'
end
end
Модель
class Email < ActiveRecord::Base
validates_length_of :first_name, :maximum => 25, :minimum => 2
validates_length_of :first_name, :maximum => 30, :minimum => 2
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
validates_length_of :message, :maximum => 500, :minimum => 20
end
Спасибо. В ответ на вариант 1 это не изменяет ошибку, которую я получаю. Возможно, потому, что @fullmessage определен в действии thank_you. (Ошибка для действия индекса) (отредактировано, чтобы показать это) Что касается варианта 2, как бы я установил ключ на основе проверки, которая не удалась в модели? –
'flash [: alert] = @ fullmessage.errors.full_messages.to_sentence' – makhan