所以我有一个 posts
在 Rails 应用程序中生成的脚手架,我添加了一个 upvote
和 downvote
列到帖子模型。我在 View 文件上添加了一个“upvote”按钮,当您点击 upvote 按钮时我需要进行 AJAX 调用并查询数据库,但是 upvote 按钮没有真正的 Rails <form>
附加到它。我如何进行此 AJAX 调用并将赞成票添加到数据库以获取赞成票?
当我进行此 AJAX 调用时:
$('.up,.down').click(function(){
$.ajax({
type: 'POST',
url: '/posts',
dataType: 'JSON',
data: {
post: {
upvote: 1
}
},
success: function(){
alert('success')
}
});
});
它返回 500 错误。我从这里去哪里?
最佳答案
您可以在 link_to
助手上使用 :remote => true
属性
例如:
<%= 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
然后在你的帖子 Controller 中处理投票,就像你可能已经在做的那样,并在操作中使用 params[:id]
获取帖子 ID
Here is an intro to rails flavored unobtrusive javascript
更新
要查看创建的赞成票和反对票路由,请转到终端并键入
rake routes | grep vote
这将为您提供名称中包含“投票”的所有路线的列表。或者只需键入 rake routes
即可获得所有路线的列表。第一列是命名路由,只需将“_path”附加到它的末尾即可在您的应用中使用它 - 如上面的 post_upvote_path
将被视为
post_upvote PUT /posts/:id/upvote(.:format) posts#upvote
在你的 PostsController 中你会想要这些 Action :
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
关于mysql - 在没有表单的情况下在 Rails 中发出 AJAX 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248974/