JQuery + thumbs_up gem渲染投票数?
插件: Thumbs Up和JQuery 1.5.2(另一个老gem需要)
当用户在post上投票时,我正在尝试使用完整的HTTP请求呈现更新的投票计数。 目前,它会在每次投票时刷新页面。
post控制器
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
投票视图(每个postdiv在左边有一个投票div(digg / reddit样式)和右边的内容)
:post, :format => :js %> all the post content, timestamp stuff, etc...
vote_up.erb.js(在post文件夹中)。
$(".votecount").html( "");
我已经坚持了一段时间,非常感谢你能提供的任何帮助。 我已经看过Jquery的railscast,并查看了其他Stackoverflow的答案,但我仍然在Jquery非常无趣。
您似乎希望将视图代码分离为部分,并且仅在提供评级时刷新一个部分。
对于您的控制器,而不是:
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以获得更多信息:
并在您的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(); } }); } })
祝好运! 🙂