Ruby on rails Rails上的Ajax-I';我有个问题

Ruby on rails Rails上的Ajax-I';我有个问题,ruby-on-rails,ajax,Ruby On Rails,Ajax,我正在开发一个RubyonRails web应用程序,其中有几个帖子列表。每篇文章都将使用Ajax加载他们的评论。为了在正确的位置填充它们,我将执行以下操作: 每个帖子都有一个div,其id格式如下:。因此,例如,如果post.id是12,那么id将是“my_div_12” 我的控制器的操作如下所示: render :update do |page| page.replace_html 'my_div_' + params[:post_id].to_s, :partial => '

我正在开发一个RubyonRails web应用程序,其中有几个帖子列表。每篇文章都将使用Ajax加载他们的评论。为了在正确的位置填充它们,我将执行以下操作:

每个帖子都有一个div,其id格式如下:
。因此,例如,如果post.id是12,那么id将是“my_div_12”

我的控制器的操作如下所示:

render :update do |page|
    page.replace_html 'my_div_' + params[:post_id].to_s, :partial => 'my_comments_section_partial_path'
end
只有当我在页面上只有一次帖子时,这才行。但在这个网站上,每个帖子可能会被列出不止一次,因为有几个列表(最新帖子、热门文章、热门文章等)。所有人都会有自己的评论部分

现在的问题是,由于comments部分功能位于局部视图中,它对每种类型的列表都会起到相同的作用(正如预期的那样),因此,div之间没有区别(因为它们将具有相同的post.id,因此具有相同的div id)

我现在的问题是:我如何解决这个问题?有没有更好的、不同的方法

提前谢谢

编辑:

为了澄清我想要什么,用几句话:


我希望代码
页面。替换\u html'my\u div'+params[:post\u id]。到\u s,:partial=>'my\u comments\u section\u partial\u path'
替换每个div调用的
'my\u div'+params[:post\u id]。到\u s
(因为同一页面中可能有多个div具有相同id)

似乎你在同一页上有两组帖子,并且担心将正确帖子的评论放在正确的位置。我认为提出两个Ajax请求就可以了。URL可能类似于
/posts/1/comments
/posts/2/comments
。基本上,你想要的是“某个帖子的所有评论”。您可以在posts控制器上设置一个comments操作,以使用来自Post的
has\u many:comments
关联。使用URL ID参数可以提供帖子ID。您可以通过自定义ID属性、自定义类或应用程序从标记中获取帖子ID

看起来您正在使用RJS,但我建议使用Prototype或jQuery发出Ajax请求,并指定JSON数据或HTML作为响应,然后将JSON或HTML附加到正确的位置

在jQuery中,我获取post ID,发出ajax请求,然后附加注释HTML。这并没有经过测试,但基本上是代码中的想法

var comments_div = $('.post .comments'); /* need a diff. comments div for each */
var post_id = $('.post').attr('data-post_id');
$.get({'/posts/'+post_id+'/comments', function(data){ comments_div.append(data); }  });

请注意,在一个页面上有多个具有相同id的元素会产生技术上无效的html。许多浏览器甚至不会呈现所有这些id属性(只留下一个,然后删除其余的)

一个简单的解决方案是切换到使用类而不是ID。同一类可以有多个元素,每个元素可以有多个类。

我不使用Rails中的内置ajax助手,但谷歌建议。

您的控制器是什么样子的?你是说所有的div都有相同的ID?你想解决什么问题?一篇给定的文章总是会在另一个小部件(或任何地方)中显示与同一篇文章相同的评论。现在,每篇文章都有一个“评论”部分,当点击“显示评论”按钮时,该部分将显示(并加载)。在我上面发布的控制器操作中,我用帖子的注释替换了partial的注释div。因此,这将只在一个div中被替换(我有一个具有相同id的div,每个具有相同id的post都有一个div。例如:我在页面中显示post#2两次,然后我将有两个id为=“div#u post_2”的div)。因此,我想用相同的id替换每个div中这些注释的结果。