当前位置: 首页 > 面试题库 >

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

端木乐语
2023-03-14
问题内容

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

我在适当的视图上有花哨的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请求的信息。


问题答案:

我知道了!

我加了一个…

skip_before_action :verify_authenticity_token

到控制器。

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



 类似资料:
  • CRUD代表创建,读取,更新,删除。这是四种方法(如果区分查看一个记录和查看所有记录,则是五种方法)。在Rails中,处理CRUD的规范方法似乎包括七种方法。例如,使用 速记法为Order对象创建路由会生成以下七条路由: 这就是我困惑的根源。为 和 设置单独的操作/路由有什么意义?使用单独的操作查看页面和在数据库中创建记录有什么好处?我理解它是如何在Rails中实现的,例如: 在使用Rails之前

  • 我正在制作一个带有一个控制器“项目”的站点,我想显示所有带有to路由的项目: /管理员/项目/:id=/admin/projects/1(工作) 我试过这个 我的文件: 路线。铷 项目管理器。铷 前端控制器。铷 在项目/index.html.erb 我已经检查了所有类似的问题。 谢谢你的帮助! Kazei设计 最新消息 :

  • 我正在尝试迁移两个Ruby on Rails应用程序,因为它们目前由原始开发人员托管,他们不允许我们访问以更改代码。这些应用程序是LocomotiveCMS_Engine和Spree站点。我让它们分别在端口3000和3333上运行得很好。 我想知道的是如何使它,当你转到页面,即localhost它会将你路由到端口3000,当你去localhost/store它会将你路由到端口3333。 我尝试使用

  • 英文原文: http://emberjs.com/guides/routing/setting-up-a-controller/ URL的改变同时也可能改变显示的模板。而模板只有当其搭载了需要呈现的信息才有用。 在Ember.js中,模板从控制器中获取需要呈现的信息。 内置的两个控制器Ember.ObjectController和Ember.ArrayController,使控制器可以非常方便的呈

  • 本文向大家介绍vue-router 控制路由权限的实现,包括了vue-router 控制路由权限的实现的使用技巧和注意事项,需要的朋友参考一下 注意:vue-router是无法完全控制前端路由权限。 1、实现思路 使用vue-router实例函数addRoutes动态添加路由规则,不多废话直接上思维导图: 2、实现步骤 2.1、路由匹配判断 通过vue-router前置守卫beforeEach中参

  • 我正在使用Laravel 8,当我将路由写入控制器时,如下所示: 它显示了这个错误: 无效的路由操作:[PortfolioController]。不可调用 所以它只能这样工作: 这对我来说没有意义,因为它应该找到,这是: Laravel 8是否忽略了属性???