所以我在rails应用程序中生成了一个scaffold,并在post模型中添加了一个posts
和upvote
列。我在视图文件中添加了一个“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 idHere 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