AJAX micropost对用户页面的评论

时间:2012-03-30 10:06:55

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

在用户的页面上有微博,每个微博都有自己的评论表和评论。使用“Endless Page”railscast我正在尝试创建“显示更多评论”按钮,这将按照AJAX加载评论。但它不起作用。

问题在show.js.erb文件中,因为:

1)评论的共同分页(没有AJAX)运作良好

2)“显示更多按钮”也运作良好。我在用户列表页面上测试了它

我认为“显示更多评论”不起作用,因为它不理解<%= j render(comments)%> ,<%= j will_paginate(comments)%> ,我应该在这里有变量,如<%= j render(@comments)%> ,<%= j will_paginate(@comments)%>

但是当我尝试写入我的users_controller.rb

def show
    @micropost = Micropost.find(params[:micropost_id])
    @comments = @micropost.comments
end

它不起作用,因为在我的用户页面上有很多微博,我有一个错误“找不到没有id的微博”。所以在我的microposts / _micropost.html.erb中我必须使用这个

<% comments = micropost.comments.paginate(:per_page => 5, :page => params[:page]) %>

<%= render comments %>

有人可以帮忙吗?我该怎么改变我的show.js.erb?

用户/ show.html.erb

<%= render @microposts %>

微柱/ _micropost.html.erb

...
micropost's content
...

    <%= render 'comments/form', micropost: micropost %>

    <% comments = micropost.comments.paginate(:per_page => 5, :page => params[:page]) %>

    <div class="commentaries">
      <%= render comments %>
    </div>      

    <div id="append_and_paginate">
      <%= will_paginate comments, :class =>"pagination", :page_links => false %>
    </div>

Javascript角/ users.js.coffee

jQuery ->
  if $('.pagination').length
    $('#append_and_paginate').prepend('<a id="append_more_results" href="javascript:void(0);">Show more</a>');
    $('#append_more_results').click ->
      url = $('.pagination .next_page').attr('href')
      if url
        $('.pagination').text('Fetching more...')
        $.getScript(url)

用户/ show.js.erb

$('.commentaries').append('<%= j render(comments) %>');
<% if comments.next_page %>
  $('.pagination').replaceWith('<%= j will_paginate(comments) %>');
<% else %>
  $('.pagination').remove();
<% end %>
<% sleep 0.3 %>

1 个答案:

答案 0 :(得分:0)

Bennington,在users / show.html.erb中你有

但是@microposts未在您的控制器中定义。我想你想要的是将@microposts定义为与用户相关的所有微博?

如果是这样,你需要像@microposts = Micropost.where(:user_id =&gt; current_user.id)之类的东西。