所以我在Rails应用中生成了一个posts
脚手架,并在帖子模型中添加了upvote
和downvote
列。我在视图文件中添加了一个“upvote”按钮,当你点击upvote按钮时我需要进行AJAX调用并查询数据库,但是upvote按钮没有附加真正的Rails <form>
。如何进行此AJAX调用并将upvote添加到数据库以获取upvoted帖子?
当我进行这个AJAX调用时:
$('.up,.down').click(function(){
$.ajax({
type: 'POST',
url: '/posts',
dataType: 'JSON',
data: {
post: {
upvote: 1
}
},
success: function(){
alert('success')
}
});
});
它返回500错误。我在哪里可以找到?
答案 0 :(得分: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
Here is an intro to rails flavored unobtrusive javascript
<强>更新强>
要查看已创建的upvote和downvote路线,请转到终端并键入
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