Сначала реорганизуйте это так, чтобы на странице существовал div error_explanation
(чтобы вы могли заполнить его сообщением об ошибке ... при необходимости скройте его с помощью CSS)
<div id="error_explanation">
<% if @user.errors.any? %>
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
</div>
Затем вы можете добавить этот бит кода jQuery в существующую область тега <script>
:
// a method for parsing the JSON response
handle_ajax_error = function(response) {
try { var responseText = jQuery.parseJSON(response.responseText); } catch(e) { var responseText = null; }
if (responseText !== null) {
var responseMsg = responseText.error;
} else {
responseMsg = 'There was an unknown error or the request timed out. Please try again later';
}
return responseMsg;
}
// callback for the ajax error on the #login form
$('#login').live('ajax:error', function(data, xhr, response){
$('#error_explanation').html(handle_ajax_error(response));
});
И тогда это предполагает, что у вас есть что-то вроде этого в вашем контроллере в ответ на ошибку:
def create
@user = User.create(params[:user])
if @user.save
redirect_to user_path(@user)
else
render :json => { :error => @user.errors.full_messages.to_sentence },
:status => :unprocessable_entity
end
end