Если вы не против использования jQuery и некоторого ajax'n, у меня есть сообщение в блоге , которое освещает это.
Вот некоторая основная информация, если вы хотите высокийобзор уровня.
Добавьте этот макет:
<%= javascript_tag "var AUTH_TOKEN = #{form_authenticity_token.inspect};" if protect_against_forgery? %>
Этот код добавляет токен аутентификации в ответ.Таким образом, JS может забрать его и отправить на сервер.
Затем мы перехватываем любой ajax-вызов в application.js:
function isPost(requestType) {
return requestType.toLowerCase() == 'post';
}
$(document).ajaxSend(function(event, xhr, settings) {
if (isPost(settings.type)) {
settings.data = (settings.data ? settings.data + "&" : "") + "authenticity_token=" + encodeURIComponent( AUTH_TOKEN );
}
xhr.setRequestHeader("Accept", "text/javascript, application/javascript");
});
Добавьте это в контроллер вашего приложения:
before_filter :correct_safari_and_ie_accept_headers
after_filter :set_xhr_flash
protected
def set_xhr_flash
flash.discard if request.xhr?
end
def correct_safari_and_ie_accept_headers
ajax_request_types = ['text/javascript', 'application/json', 'text/xml']
request.accepts.sort!{ |x, y| ajax_request_types.include?(y.to_s) ? 1 : -1 } if request.xhr?
end
И по вашему мнению:
<%= link_to "Delete", delete_product_path(product), :class => 'delete' %>
Вернемся к application.js:
$('a.delete').live('click', function(event) {
if(event.button != 0) { return true; }
$.post(link.attr('href').substring(0, link.attr('href').indexOf('/delete')), { _method: "delete" });
return false;
});
В этом примере выполняется удаление, но на самом деле это тот же процессобрабатывать сообщения или путы.В блоге есть пример приложения, которое демонстрирует это.