3

因此,我posts在 Rails 应用程序中生成了一个脚手架,并在 post 模型中添加了一个upvoteanddownvote列。我在视图文件上添加了一个“upvote”按钮,当您点击 upvote 按钮时,我需要进行 AJAX 调用并查询数据库,但是 upvote 按钮没有<form>附加真正的 Rails。如何进行此 AJAX 调用并将投票添加到数据库中以获取已投票帖子?

当我进行此 AJAX 调用时:

$('.up,.down').click(function(){
    $.ajax({
      type: 'POST',
      url: '/posts',
      dataType: 'JSON',
      data: {
        post: {
          upvote: 1
        }
      },
      success: function(){
        alert('success')
      }
    });
  });

它返回 500 错误。我去哪里形成这里?

4

1 回答 1

7

您可以使用帮助器:remote => true上的属性link_to,例如:

<%= link_to post_upvote_path(post), :remote => true, :method => "put" %>
<%= link_to post_downvote_path(post), :remote => true, :method => "put" %>

然后在config/routes.rb

resources :posts do
  put "upvote", :to => "posts#upvote", as: :upvote
  put "downvote", :to => "posts#downvote", as: :downvote
end

然后在您的帖子控制器中处理投票,就像您可能已经在做的那样,并params[:id]在操作中获取帖子 ID

这是 Rails 风格的不显眼 javascript 的介绍

更新
要查看创建的赞成和反对路线,请转到终端并键入

rake routes | grep vote

这将为您提供名称中包含“投票”的所有路线的列表。或者只需键入rake routes以获取所有这些的列表。第一列是命名路由,只需将“_path”附加到它的末尾即可在您的应用程序中使用它 - 就像post_upvote_path上面那样被视为

post_upvote  PUT  /posts/:id/upvote(.:format) posts#upvote

在您的 PostsController 中,您需要这些操作:

class PostsController < ApplicationController
  ###
  # index, show... other RESTful actions here
  ###


  def upvote
    @post = Post.find params[:id]
    # code for however you are voting up the post here
  end

  def downvote
    @post = Post.find params[:id]
    # code for however you are voting down the post here
  end
end
于 2013-01-10T00:57:36.523 回答