所以我在rails应用程序中生成了一个scaffold,并在post模型中添加了一个postsupvote列。我在视图文件中添加了一个“upvote”按钮,当您点击upvote按钮时,我需要进行一个ajax调用并查询数据库,但是upvote按钮没有真正的railsdownvote连接到它。如何进行此ajax调用并将upvote添加到upvoted post的数据库中?
当我调用ajax时:

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

它返回一个500错误。我从这里到哪里?

最佳答案

您可以在: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

然后在posts控制器中处理投票,就像您可能已经这样,并在操作中使用params[:id]获取post id
Here is an intro to rails flavored unobtrusive javascript
更新
要查看已创建的上投票和下投票路由,请转到终端并键入
rake routes | grep vote

这将给你一个名单,你所有的路线,有“投票”的名字。或者只需输入rake routes就可以得到所有这些的列表。第一列是命名路由,只需在它的末尾附加'\u 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

10-06 10:33