Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 邮递http://localhost:3000/post/vote 500(内部服务器错误)-没有与[GET]匹配的路由/张贴/投票“;尝试在Rails中发布ajax时_Ruby On Rails_Ajax - Fatal编程技术网

Ruby on rails 邮递http://localhost:3000/post/vote 500(内部服务器错误)-没有与[GET]匹配的路由/张贴/投票“;尝试在Rails中发布ajax时

Ruby on rails 邮递http://localhost:3000/post/vote 500(内部服务器错误)-没有与[GET]匹配的路由/张贴/投票“;尝试在Rails中发布ajax时,ruby-on-rails,ajax,Ruby On Rails,Ajax,我正在使用投票按钮,试图在RoR中发布ajax,但无法通过它 请检查我的路线控制器和ajax,如下所示: post 'post/vote' => 'votes#create' 我现在想要的是记录“成功”为什么会出现错误http://localhost:3000/post/vote 500(内部服务器错误)出现,当我尝试转到http://localhost:3000/post/vote 在尝试发布ajax时,它不显示与[GET]“/post/vote”匹配的路由。看起来像当前帐户是ni

我正在使用投票按钮,试图在RoR中发布ajax,但无法通过它

请检查我的路线控制器和ajax,如下所示:

  post 'post/vote' => 'votes#create'

我现在想要的是记录“成功”为什么会出现错误http://localhost:3000/post/vote 500(内部服务器错误)出现,当我尝试转到http://localhost:3000/post/vote 在尝试发布ajax时,它不显示与[GET]“/post/vote”匹配的路由。

看起来像
当前帐户
nil
。将以下代码添加到
VotesController
以确保用户已通过身份验证

在\u操作之前:验证\u帐户!

authenticate\u帐户方法将为控制器中定义的每个操作调用。

您可以共享POST请求的rails日志吗?是的,先生,它如下所示:NoMethodError(未定义的方法
id'for nil:NilClass):app/controllers/voces\u controller.rb:6:in
create'Started POST”/POST/votefor::1在2021-02-27 12:58:29+0700由VotesController进行的处理#创建为/参数:{“post_id”=>“2”}在3ms内完成了500个内部服务器错误(ActiveRecord:0.0ms |分配:1234)NoMethodError(对于nil:NilClass,未定义的方法
id')):app/controllers/vows\u controller.rb:6:in
create'omg真的很抱歉我的愚蠢,谢谢你的帮助!抱歉,我原以为它可以正常工作,但新问题出现了。POST 401(未经授权)显示为ActionController::RoutingError(没有与[GET]“/POST/vote]匹配的路由):@Kamidesu用户登录了吗?为什么GET请求被发送到
/post/vote
?对不起,先生,我在尝试按下按钮之前忘记登录,但仍然不知道为什么我没有登录时会有GET请求。无论如何,谢谢你的帮助。
votesconneler#create
方法呈现
vows/create.js.erb
对吗?那么为什么要使用
$.ajax
?您可以将
按钮\u与
remote:true
一起用于向上投票按钮。感谢您的建议。这是我学习的一部分,我只是试着遵循一个教程。它说有很多帖子和upvote downvote按钮,所以使用js比表单更好,但它没有告诉我原因。
class VotesController < ApplicationController
  def create
    vote = Vote.new
    post_id = params[:post_id]
    vote.post_id = params[:post_id]
    vote.account_id = current_account.id
    existing_vote = Vote.where(account_id: current_account.id, post_id: post_id)

    respond_to do |format|
      format.js do
        if existing_vote.size > 0
          existing_vote.first.destroy
        else
          @success = if vote.save
                       true
                     else
                       false
                     end

          @post = Post.find(post_id)
          @total_upvotes = @post.upvotes
          @total_downvotes = @post.downvotes
        end
      end
    end
  end
$(function () {
  $(".vote").on("click", ".upvote", function () {
    let post_id = $(this).parent().data("id");
    console.log("clicked " + post_id);

    $.ajax({
      url: "post/vote",
      type:'POST',
      data: { post_id: post_id },
      success: function(){
        console.log("success");
      }
    });
  });
});

NoMethodError (undefined method `id' for nil:NilClass):
  
app/controllers/votes_controller.rb:6:in `create'
Started POST "/post/vote" for ::1 at 2021-02-27 12:58:29 +0700
Processing by VotesController#create as */*
  Parameters: {"post_id"=>"2"}
Completed 500 Internal Server Error in 3ms (ActiveRecord: 0.0ms | Allocations: 1234)


  
NoMethodError (undefined method `id' for nil:NilClass):
  
app/controllers/votes_controller.rb:6:in `create'