现在,我的Rails应用程序中有一个“投票”模型。页面上的每个帖子都有一个upvote按钮,目前写为:
<%= link_to "✓", votes_path(:vote => {:post_id => post.id, :up => false}), :method => :post %>
其中post_id是投票链接的帖子,而up是一个布尔表示投票是真的。我正在尝试使用JQuery而不是link_to,这样每次有人投票时页面都不会重新加载。但是,我不明白AJAX post请求与数据库模型的接口是什么样的。
编辑:投票控制器:
def create
respond_to do |format|
format.html
format.js { flash[:notice] = "Vote created"} # and render your <action>.js file}
end
@vote = Vote.where(:post_id => params[:vote][:post_id], :user_id => current_user.id).first
if @vote
@vote.up = params[:vote][:up]
@vote.save
else
@vote = current_user.votes.create(vote_params)
end
redirect_to :back
end
答案 0 :(得分:2)
使用remote: true
选项进行ajax调用。
<%= link_to "✓", votes_path(:vote => {:post_id => post.id, :up => false}, :format => :js), :method => :post, remote: true %>
它将为您的控制器生成一个ajax调用。然后,您可以相应地操纵您的操作。
respond_to do |format|
format.html
format.js { flash[:notice] = "Vote created"} # and render your <action>.js file
end
<强>更新强>
def create
@vote = Vote.where(:post_id => params[:vote][:post_id], :user_id => current_user.id).first
if @vote
@vote.up = params[:vote][:up]
@vote.save
else
@vote = current_user.votes.create(vote_params)
end
respond_to do |format|
format.html
format.js { flash[:notice] = "Vote created"} # and render your <action>.js file}
end
end
应该有用,让我知道
还要检查一下..
您的app/assets/javascripts/application.js
应该包含。
//= require jquery
//= require jquery_ujs
你的erb应该包含
<%= javascript_include_tag "jquery", "jquery_ujs" %>
答案 1 :(得分:-1)
您可以重新使用link_to
到post
远程请求,而无需加载:
<%= link_to "✓", votes_path(:vote => {:post_id => post.id, :up => false}), :method => :post, remote: true %>.
你必须为此目的写一个<your_action_name>.js.erb
。