Ruby on rails Rails-使用多个部分更新页面上的单个部分
我有一个有多个帖子的页面。我想每个帖子的投票更新后,用户投票,而不必重新加载页面。我看了又看,但是大多数遇到这个问题的人在页面上只有一个partial,所以他们可以只使用partial包含div的id 我尝试过使用Ajax和jQuery,但一直遇到问题。现在,投票更新正确,但它改变了一个链接上的所有部分。我尝试为每个部分设置一个动态id,但它只会更改第一个,因为@post变量被设置为最后一个post。所以,即使我对第三篇文章投了票,第一篇文章的部分内容也会改变,而不是第三篇 我使用的是rails 3.2.14和ruby 2.0 这是我的密码: posts/index.html.erbRuby on rails Rails-使用多个部分更新页面上的单个部分,ruby-on-rails,ajax,partial,voting,Ruby On Rails,Ajax,Partial,Voting,我有一个有多个帖子的页面。我想每个帖子的投票更新后,用户投票,而不必重新加载页面。我看了又看,但是大多数遇到这个问题的人在页面上只有一个partial,所以他们可以只使用partial包含div的id 我尝试过使用Ajax和jQuery,但一直遇到问题。现在,投票更新正确,但它改变了一个链接上的所有部分。我尝试为每个部分设置一个动态id,但它只会更改第一个,因为@post变量被设置为最后一个post。所以,即使我对第三篇文章投了票,第一篇文章的部分内容也会改变,而不是第三篇 我使用的是rails
<% all_posts.each do |post| %>
<div class="votes-box">
<%= render partial: 'vote', locals: {post: post} %>
</div>
<% end %>
<%= link_to '', vote_post_path(post, type: 'up' ), remote: true, method: 'post', class: 'upvote' %>
<div class="vote-rep"><%= post.reputation_for(:votes).to_i %> Rep</div>
<%= link_to '', vote_post_path(post, type: 'down' ), remote: true, method: 'post', class: 'downvote' %>
$(".votes-box").html("<%= escape_javascript(render partial: 'vote', locals: {post: @post}).html_safe %>");
def vote
value = params[:type] == 'up' ? 1 : -1
@post = Post.find(params[:id])
@post.add_or_update_evaluation(:votes, value, current_user)
respond_to do |format|
format.js
end
end
关键是首先在html中为每个帖子添加id,然后在js响应中只更新所需的id 首先是模板
<% all_posts.each do |post| %>
<%# Or you can use `content_tag_for` %>
<%# in following line to generate id automatically. %>
<div id="post_#{post.id}">
<div class="votes-box">
<%= render partial: 'vote', locals: {post: post} %>
</div>
</div>
<% end %>
然后作为回应
$("#post_#{post.id} .votes-box").html("<%= escape_javascript(render partial: 'vote',
locals: {post: @post}).html_safe %>");
$(“#post#{post.id}.voates框”).html(“”);
我试过了,虽然增加了投票,但部分投票没有改变。我还尝试使用操作符(而不是{}),这也没有帮助。请检查服务器的响应是否正确,如果它们是js代码,请将它们粘贴到浏览器控制台中,然后重试。我找到了答案。我在视图中使用了“post”,在js文件中使用了“post”。谢谢你的帮助!