Ajax page.replace_html Rails中的partials问题

时间:2010-04-23 15:42:20

标签: ruby-on-rails ruby ajax

我在rails中遇到一个非常简单的AJAX调用问题。我有一个博客风格的应用程序,每个帖子都有一个“喜欢”的功能。我希望能够使用AJAX onclick增加索引中每个帖子的“喜欢”。我得到了它的工作;然而,DOM在这里有点棘手,因为无论它看哪个部分,它都只会更新TOP部分。因此,如果我在帖子#2上点击“赞”,它将更新并替换帖子#1上的“赞”。

_post partial的代码:

<some code here...>

<div id="postcontent">
Posted <%= post.created_at.strftime("%A, %b %d")%> <br />
</div>

<div id="postlikes">
<%= link_to_remote 'Like', :url => {:controller => 'posts', :action => 'like_post', :id => post.id}%>
<%= post.like %>
</div>

_postlikes partial的代码:

<div id="postlikes">
<%= link_to_remote 'Like', :url => {:controller => 'posts', :action => 'like_post', :id => @post.id}%>
<%= @post.like %>
</div>
</div>

like_post.rjs代码:

page.replace_html "postlikes", :partial => "postlikes", :object => @post
page.visual_effect :highlight, "postlikes", :duration => 3

所以这一切都适用于第一个“postcontent”div。但这是帖子的索引,所以如果我想更新页面上的第二个“postcontent”div,它仍然会替换第一个的html。

我理解这个问题,我只是不知道如何解决它:)

提前致谢!

2 个答案:

答案 0 :(得分:1)

更改您的

<div id="postlikes">

<div id="postlikes_<%= post.id %>">

然后,

page.replace_html "postlikes_#{@post.id}", :partial => "postlikes", :object => @post

答案 1 :(得分:0)

这是因为您的Div ID对于每个部分都是相同的。你需要做这样的事情:

<div id="<%= dom_id(post) %>">

<div id="postlike_<%= dom_id(post) %>">

我不太确定你是如何设置它的,但你需要为每个帖子(以及可能的后喜欢)提供唯一的ID。

Ĵ