Rails中的POST 422(不可处理实体)?由于路线还是控制器?

Piratetone:

我正在尝试为我网站上的用户提供有关品牌名称推文的“积分”或“积分”。

我在适当的视图上有花哨的Twitter小部件...

<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>    

我把JS都写好了,很漂亮....

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);
  }); 
});

现在问题出在控制器中还是在路由中(我要在其中发布)。我认为路由很好,因为POST几乎可以运行,因为这是维基百科上的错误描述-“ 422无法处理的实体(WebDAV; RFC 4918)请求格式正确,但由于语义错误而无法遵循”。

那么,你们在控制器中看到我的红宝石代码有什么问题吗?

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

在我的routes.rb中,这很简单,所以我怀疑这里有什么问题...

  get 'social_kredit/credit_tweet'
  post '/credit_tweet' => 'social_kredit#credit_tweet'

哦,这个错误在哪里?我显然不知道有关HTTP请求的信息。

Piratetone:

我知道了!

我加了一个...

skip_before_action :verify_authenticity_token

到控制器。

在检出日志并发现无法验证CSRF令牌时发现了问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Rails:Rails中的POST 422(不可处理实体)?是由于路线还是控制器?

422(不可处理实体)POST 使用 rails

在控制器中无法访问Rails POST参数

控制器中的get和post方法。Ruby on Rails

Rails路线和控制器动作

422 Laravel中的AJAX POST请求后出现不可处理的实体错误

如何纠正由于Laravel 8中的视图,路线和控制器方案导致的404 NOT FOUND错误?

在 Rails 控制器中处理一个选项

Rails 4试图解析控制器中的POST JSON

在部署到子目录的Rails应用程序中的路线中隐藏控制器

优雅的Rails:多条路线,相同的控制器动作

用于索引的Rails路线更改控制器

Rails CRUD路线和控制器方法最佳实践

冲突的设计和宁静的控制器路线| Rails 5.2

GraphQL / Rails 422不可处理实体-将令牌保存到会话

如何在Ruby on Rails中添加自定义路线,控制器和动作?

Angular 中的 422(不可处理实体)在 Laravel 登录 api 中发布

Ruby On Rails控制器测试,工厂还是模拟?

灰烬-如何从控制器中调用路线的操作

一条路线中的多个控制器

控制器中带有参数的测试路线

Rails MVC-数据库搜索逻辑应该放在模型还是控制器中

如何在odata控制器中实现与常规PUT相同的POST以更新实体

在控制器 Rails 中传递 id

控制器中的Rails辅助模块

什么是Rails控制器中的ivar?

从Rails 4中的控制器注销

Rails:控制器中的Shell命令

Rails 控制器中的模型方法