Rails 3使用Ajax更新页面上多个相同元素

时间:2011-04-14 09:21:11

标签: javascript ruby-on-rails ajax ruby-on-rails-3

我有一个具有一些简单功能的rails应用程序,允许用户保存/取消保存帖子。

这样做很好,也很好,就像这样:

视图:

<p id="save_<%= frugle.id %>">
  <%= link_to "Save", new_saveds_path(current_user.id, :post_id => post.id), :remote => true %>
</p>

控制器:

class SavedsController < ApplicationController
  def new
    @follow = Saved.create(:user_id => current_user.id, :post_id => params[:post_id])
    @post = Post.find params[:post_id]
    render :update do |page|
      page.replace_html "save_#{@post.id}", "#{link_to "Unsave", saveds_path(current_user.id, :post_id => @post.id), :method => :delete, :remote => true }"
    end
  end

这很好用,花花公子。我的问题是,有时,在主页上,用户有很多帖子被查看,偶尔同一帖子会出现两次。如果用户去保存这篇文章,上面的RJS只会改变它遇到的特定id的第一个p然后停止。有没有办法在一个页面上更新所有带有该ID的p?

这有道理吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您不能“使用该ID更新所有'p',因为根据定义,页面上只有一个元素具有给定的ID。

但是,如果您根据 rails id 为所有<p>提供,则可以执行您想要的操作。

示例:

<p class="object-1234">test</p>
<p class="object-5678">another test</p>
<p class="object-1234">test</p>

现在你可以做到:

$('.object-1234').hide()

并获得理想的效果。

修改
此外,这假设您在AJAX视图中使用jQuery。我强烈建议你这样做 - 它比内置的rj更有用 这是关于它的截屏视频:http://railscasts.com/episodes/136-jquery