javascript - property - POST 422(Entidad no procesable) en Rails? ¿Debido a las rutas o al controlador?
title label html (2)
¡Lo tengo funcionando!
Agregué un ...
skip_before_action :verify_authenticity_token
al controlador.
El problema se encontró al revisar los registros y al ver que el token CSRF no se pudo verificar.
Estoy tratando de dar a los usuarios en mi sitio web "puntos" o "créditos" por tuitear acerca de la marca.
Tengo el widget de Twitter de lujo en la vista apropiada ...
<p><a href="https://twitter.com/share" class="twitter-share-button" data-text="Check Out This Awesome Website Yay" data-via="BrandName" data-hashtags="ProductName">Tweet</a>
<div id="credited"></div>
<script>window.twttr = (function (d, s, id) {
var t, js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src= "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
return window.twttr || (t = { _e: [], ready: function (f) { t._e.push(f) } });
}(document, "script", "twitter-wjs"));
</script>
Tengo el JS todo escrito y bonito ....
function creditTweet() {
$.post(
"/credit_tweet",
{},
function(result) {
var text;
if (result.status === "noop") {
text = "Thanks for sharing already!";
} else if (result.status === "ok") {
text = "5 Kredit Added";
}
$("#credited").html(text);
}
);
}
$(function() {
twttr.ready(function (twttr) {
window.twttr.events.bind(''tweet'', creditTweet);
});
});
Ahora el problema está en el controlador O en las rutas (donde estoy publicando). Creo que las rutas están bien porque la POST está casi funcionando, porque esta es la descripción del error en wikipedia - "422 Entidad no procesable (WebDAV; RFC 4918) La solicitud estaba bien formada pero no se pudo seguir debido a errores semánticos . "
Entonces, ¿ven algo malo con mi código ruby en el controlador?
class SocialKreditController < ApplicationController
TWEET_CREDIT_AMOUNT = 5
def credit_tweet
if !signed_in?
render json: { status: :error }
elsif current_user.tweet_credited
Rails.logger.info "Not crediting #{ current_user.id }"
render json: { status: :noop }
else
Rails.logger.info "Crediting #{ current_user.id }"
current_user.update_attributes tweet_credited: true
current_user.add_points TWEET_CREDIT_AMOUNT
render json: { status: :ok }
end
end
end
Y en mi route.rb, es bastante sencillo, así que dudo que haya algo malo aquí ...
get ''social_kredit/credit_tweet''
post ''/credit_tweet'' => ''social_kredit#credit_tweet''
¿Dónde oh dónde está este error? Claramente no sé nada acerca de las solicitudes HTTP.
Mismo problema que enfrenté. Se resuelve después de agregar
skip_before_action: verify_authenticity_token
en la parte superior de su controlador, donde su JS está llamando o enviando datos.
class UserController < ApplicationController
skip_before_action :verify_authenticity_token
def create
end
end
como se muestra en el fragmento de código.