插件: Thumbs Up& JQuery 1.5.2(另一个老宝石需要)
当用户在帖子上投票时,我正在尝试使用完整的HTTP请求呈现更新的投票计数。目前,它会在每次投票时刷新页面。
帖子控制器
def vote_up
post = Post.find(params[:id])
current_user.vote_exclusively_for(post)
respond_to do |format|
format.js
format.html {rRedirect_to :back}
end
end
def vote_down
post = Post.find(params[:id])
current_user.vote_exclusively_against(post)
respond_to do |format|
format.js
format.html {redirect_to :back}
end
end
投票观看(每个帖子div左边有一个投票div(digg / reddit样式),右边有内容)
<div class="post">
<div class="vote">
<div class="votewrapper">
<span class="votecount">
<%= post.votes_for - post.votes_against %>
</span>
<div class="votebtn">
<%= link_to image_tag('vote.png'), vote_up_post_path(post), :method => :post, :format => :js %>
</div>
</div>
</div>
<div class="postcontent">
all the post content, timestamp stuff, etc...
</div>
</div>
vote_up.erb.js(在帖子文件夹中)。
$(".votecount").html(
"<%= escape_javascript post.votes_for - post.votes_against %>");
我已经坚持了一段时间,非常感谢你能提供的任何帮助。我已经看过Jquery的railscast,并查看了其他Stackoverflow的答案,但我在Jquery仍然很吵。
答案 0 :(得分:6)
您似乎希望将视图代码分成部分,并且只在提供评级时刷新一个部分。
对于您的控制器,而不是:
respond_to do |format|
format.js
format.html {redirect_to :back}
end
做类似的事情:
render :partial => "voutecount"
在您的视图中,将votewrapper div移出到同一目录中名为“_votecount.html.erb”的新文件中,而不是具有呈现代码:
<%= render :partial => "votecount" %>
如果您想在刷新(推荐)时阻止评级,那么您可能想要调整呼叫并在js中更多地控制它。因此,请在视图中包含您的javascript:
<%= javascript_include_tag 'votecount' %>
用好的'html替换你的link_to以获得更多信息:
<a href="" class="ratelink" updown="up" theid="123"><img src = "...."></a>
<a href="" class="ratelink" updown="down" theid="123"><img src = "...."></a>
在public / javascripts文件夹中创建一个新的votecount.js,其中包含以下内容:
$(function(){
$(".ratelink").click(function(){
var val = $(this).attr('updown');
var theid = $(this).attr('theid');
$("#votewrapper").block({ //blocks rate-rates while processing
message: null,
overlayCSS: {
backgroundColor: '#FFF',
opacity: 0.6,
cursor: 'default'
},
});
if (val == "up") {
$.ajax({
type: 'PUT',
url: "/mymodel/voteup?id="+theid,
success: function(){
$("#votewrapper").unblock();
}
});
} else {
$.ajax({
type: 'PUT',
url: "/mymodel/votedown?id="+theid,
success: function(){
$("#votewrapper").unblock();
}
});
}
})
祝你好运! :)