Например, у нас имеется ссылка для удаления новости. Если юзер имеет
доступ, то новость должна удалиться и юзеру приходит мессага типо
"Успешно удалено". Иначе - редирект на страницу "нет доступа", если
кто-то подменит ссылку например.
Делается это очень просто. В контроллере пишем:
if request.xhr? # если запрос - аякс
response = Hash.new
if current_user.has_access_to_delete?
response[:status] = 'success'
response[:message] = 'Новость успешно удалена'
else
response[:status] = 'redirect'
response[:url] = '/news/123123' # ну или использовать url_for
end
render :json => response
end
В js файле пишем:
$(".delete").bind("click", function(){ // при клике на ссылке
удаления новости
if (confirm('Are you sure?')) {
$.ajax({
dataType: "json", // этим параметром определяется, что ответ от
сервера будет получен в json
type: "DELETE", // method: delete
url: $(this).attr('href'),
success: function(msg){
if (msg.status == 'success') { // если response[:status] ==
"success"
alert(msg.message); // Скажет что новость успешно удалена
} else if (msg.status == 'redirect') {
window.location = msg.url; // редиректим на response[:url]
}
}
});
}
return false; // понятно зачем
});
Да кстати, если нужно отдать ответ от сервера в html, то надо
использовать render_to_string:
response[:html] = render_to_string(:controller => "news", :action =>
"show")
а потом работать уже с response.html