2011-09-01 11 views
10

Tengo un controlador que usa AJAX para CRUD, sin embargo cada vez que hago clic en uno de mis enlaces remotos (Eliminar por ejemplo) veo que el servidor de rieles ha decidido cerrar la sesión y redirigirme. La inspección de los registros del servidor indica que no puede verificar la autenticidad de CSRF. ¿Cómo incluyo el token CSRF en mi solicitud?Idear el usuario de registro en la solicitud de AJAX. Rails 3.1

de reproducción: - Rails 3.1 - Idear 1.4.4 - jquery-rails 1.0.13

importantes del regulador Acción:

def destroy 
    @article = Article.find(params[:id]) 
     if @article.destroy 
     flash[:notice] = "Article deleted." 
     respond_to do |format| 
     format.html{redirect_to articles_path} 
     format.js{} 
     end 
     else 
     flash[:error] = "Try Again." 
     redirect_to :back 
     end 

Presentaciones/application.html.erb

 <head> 
    <title><%= content_for?(:title) ? yield(:title) : "Untitled" %></title> 
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap-1.1.1.min.css> 
    <%= stylesheet_link_tag "application" %> 
    <%= javascript_include_tag :defaults %> 
    <script type="text/javascript">jQuery.ajaxSetup({ beforeSend: function (xhr) { xhr.setRequestHeader("Accept", "text/javascript"); } });</script> 
    <%= csrf_meta_tag %> 
    <%= yield(:head) %> 
    </head> 

Gracias de antemano.

Respuesta

8

Rails 3.1 utiliza la gema 'jquery-rails', que quiere que tenga esto en su archivo application.js:

//= require jquery 
//= require jquery_ujs 

me había olvidado los jquery_ujs y estaba recibiendo el mismo problema que tú.

+0

Ahh, esto también solucionó mi problema. ¡Gracias! – neezer

4

Usted debe tener esto en su página html:

<%= csrf_meta_tag %> 

la que genera los siguientes:

<meta name="csrf-param" content="authenticity_token"/> 
<meta name="csrf-token" content="the token comes here"/> 

Cada vez que lo hace después (eliminar, PUT son en realidad la POST pero con _method establecer de forma dependiente), deberías incluir el {authenticity_token: "the token comes here"} en los datos junto con tu publicación.

+0

Sí, asegúrese de tener eso en su diseño. –

+0

Aunque sí, esa es la parte extraña. –

+0

He incluido el encabezado de application.html.erb –

Cuestiones relacionadas