Я создаю простое демонстрационное приложение, которое позволяет пользователю вводить свой адрес электронной почты, чтобы зарегистрировать свою заинтересованность в получении бета-доступа. Затем приложение отправляет им подтверждение по электронной почте, которое сообщает им, что мы получили их запрос. Если вы когда-либо подписывались на уведомление о запуске бета-версии, вы получите идею.
Мне интересно, как обрабатывать ошибки в Rails 3 при использовании AJAX. До реализации моего блока response_to у меня была форма, в которой общие ошибки частично отображались.
Вот форма.
<% if flash[:notice] %>
<p><%= flash[:notice] %></p>
<% end %>
<p>Sign up to be notified when the beta launches.</p>
<%= form_for @user, :remote => true do |form| %>
<%= render '/shared/errors', :target => @user %>
<%= form.label :email, "Your Email Address" %>
<%= form.text_field :email %>
<%= form.submit "Notify Me" %>
<% end %>
А вот и вышеупомянутые частичные ошибки.
<% if target.errors.any? %>
<ul>
<% target.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
Очень стандартные вещи. Действие контроллера выглядит следующим образом.
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.html { redirect_to :back, flash[:notice] = "Thanks for your interest! We'll let you know when the app is in beta." }
format.js
else
format.html { render :action => :new }
format.js
end
end
end
Все отлично работает до реализации ajax. Если форма проходит проверку, они увидят флэш-сообщение об успехе, а если нет, то увидят список ошибок. Итак, теперь, когда у меня есть файл create.js.erb, как мне обрабатывать ошибки, не повторяя себя, или это невозможно. Я, очевидно, хочу сохранить это как можно более сухим.