Ruby on rails Rails上的Ajax-I';我有个问题
我正在开发一个RubyonRails web应用程序,其中有几个帖子列表。每篇文章都将使用Ajax加载他们的评论。为了在正确的位置填充它们,我将执行以下操作: 每个帖子都有一个div,其id格式如下: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 => '
。因此,例如,如果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中这些注释的结果。