【发布时间】:2010-12-18 18:30:33
【问题描述】:
我是 Rails 新手,所以请放轻松。我已经建立了一个博客,并且正在尝试向 /posts/index.html.erb 页面添加“投票”类型的功能。有点像 Facebook 的点赞功能。我已经可以成功地使投票表起作用。我已经成功地通过 调用。这是我遇到问题的地方。然后我告诉 index,在上面,也为每个帖子呈现投票表单,并且 显示每个帖子的总票数并允许为每个帖子提交表单。我正在使用 AJAX 让这一切一起工作。
由于我的 /votes/create.js.rjs 的工作方式,它会将结果发送到 div id="votes",并在 我将 包裹在 votes div 标签中。但是create.js.rjs在发送数据的时候,只会更新渲染的html页面上的第一个div标签。
因此,如果您可以想象,就像在 facebook 上一样,当您单击您喜欢的内容时,更新不会发生在您刚刚单击的帖子上,而是返回到另一个帖子的页面顶部,即第一个帖子。投票计数由您单击的元素表示,但记录错误。
代码如下:
POSTS/INDEX.HTML.ERB
<% @posts.each do |post| %>
<%= render :partial => post %>
<%= render :partial => @post %>
<div id="beltcomments">
<div id="beltcommenttext">
<div id="votebutton">
<% remote_form_for [ post, Vote.new] do |f| %>
<%= f.hidden_field :vote, :value => '1' %>
<%= submit_tag '', :class => 'voteup' %>
</div>
<div id="vote"><br/>
<%= post.votes.count %> People like the above BattleCry. <br/>
<%= link_to "Comments (#{post.comments.count})", post %>
</div>
</div>
</div>
<br/>
<br/>
<br/>
<br/>
<% end %>
<% end %>
<div id="commenttime">
Copyright 2009, My Life BattleCry, LLC.
</div>
/POSTS/CREATE.JS.RJS
page.replace_html :votes, :partial => @vote
page[@vote].visual_effect :highlight
/POSTS/_VOTE.HTML.ERB
<% div_for vote do %>
<%= @post.votes.count %> with your vote. Awesome!!!
<div id="commenttime">
Thanks for your vote. <br/>
</div>
<% end %>
【问题讨论】:
标签: ruby-on-rails ruby ajax blogs