我是新來的rails,所以對我來說很容易。我已經構建了一個博客,並且正在嘗試向/posts/index.html.erb頁面添加「投票」類型功能。有點像Facebook的功能。我可以成功獲得投票表單的工作。我已經成功地通過<%@ posts.each do | post | %>呼叫。這是我遇到問題的地方。然後,我告訴索引,在上面還要爲每個帖子投票表單以及<%= post.votes.count%>來顯示每個帖子的總票數並允許爲每個帖子提交表單。我正在使用AJAX來允許這一切工作在一起。Ruby on Rails - AJAX - div問題
由於我的/votes/create.js.rjs工作方式,它會將結果發送到div id =「votes」,並在<%@ posts.each do | post | %>我在票div標記中包裝<%= post.votes.count%>。但是,當create.js.rjs發送數據時,它只會更新呈現的html頁面上的第一個div標籤。
所以,如果你可以想象,就像在Facebook上一樣,當你點擊你喜歡的東西時,更新不會發生在你剛剛點擊的帖子上,而是在另一篇帖子的第一篇文章的頁面頂部。投票計數是由您點擊的元素表示的,但在錯誤的記錄中。
下面是代碼:
帖子/ 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 %>
這正是發生的情況。我想我可以帶領更多的導航幫助,以便將上述內容放在哪裏。例如,我是否要替換當前的<%@ posts.do each | post | %>與上面的代碼,或者我添加它下面?此外,是否必須更改/votes/create.js.rjs以表示「vote - #{i}」,以及正確的語法是什麼。最後,我是否需要向votes_controller.rb添加一些內容來傳遞此信息?我希望有這樣做。謝謝,如果可以的話,讓我知道上面的內容。 – bgadoci 2009-11-20 15:38:21
正確,你會替換當前的<%@ posts.do each | post | %>。 正確,您需要檢查rjs以查找諸如「vote - #{i}(但先看下一段)」 正確,您需要將此內容傳遞給控制器,以傳遞給rjs 。 這可以通過在form_remote_for中添加一個:with => i或創建另一個隱藏字段來保存每個div的i值,然後它將與表單一起提交,您可以使用「vote - #{ params [:i]}「以得到值 – Lukas 2009-11-20 16:17:32