will_paginate无法使用partial的无限页面

时间:2012-12-19 21:57:16

标签: jquery ruby-on-rails-3 will-paginate

我一直关注无尽页面上的railscast并且之前为will_paginate做了同样的事情,但是我遇到了错误,但是我尝试在我的具体情况下实现它。 will_paginate gems工作得很完美,就像我在阅读Chrome中的开发人员工具时所看到的那样,jQuery调用dom也是如此。问题在于返回的内容 - rails不喜欢它。这是一些代码:

videos.js.coffee

jQuery ->
  if $('.pagination').length
    $(window).scroll ->
      url = $('.pagination .next_page').attr('href')
      if url && $(window).scrollTop() > $(document).height() - $(window).height() - 50
        $('.pagination').text("Fetching more videos...")
        $.getScript(url)
    $(window).scroll()

在我的views/users/index.js.erb

$('.carousel').append(' <%= j render(@recently_added_video) %>');
<% if  @recently_added_video .next_page %>
  $('.pagination').replaceWith('<%= j will_paginate(@recently_added_video) %>');
<% else %>
  $('.pagination').remove();
<% end %>

在我的共享部分中,由users/index.erb.html

呈现
    <div class="carousel" %>

    <ul class="jcarousel-skin-recent">
        <% @recently_added_video.each do |v| %>
          <li><%= link_to image_tag(v.video_thumb(), width: 300), v %></li>
        <% end %>  
    </ul>
</div> 

   <%= will_paginate @recently_added_video %>

这使我在开发日志中出现以下错误:

Completed 500 Internal Server Error in 15ms

ActionView::Template::Error (Missing partial videos/video with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :coffee]}.

所以我尝试使用与views/videos/_video.js.erb文件相同的代码创建users/index.js.erb部分,但它会给我以下错误:

  Rendered shared/_recentlyadded.html.erb (853.8ms)
  Rendered users/index.html.erb within layouts/application (1741.4ms)
  Rendered layouts/_header.html.erb (2.6ms)
  Rendered layouts/_footer.html.erb (0.0ms)
Completed 200 OK in 1813ms (Views: 1801.0ms | ActiveRecord: 8.5ms | Sphinx: 0.0ms)
Illegal instruction: 4

正如您所看到的,它实际上并未呈现_video部分。

如果它具有相关性,我试图调用的实例变量@recently_added_videoapplication_controller中定义,并且对部分和will_paginate工作正常。

任何人都可以帮助弄清楚出了什么问题吗?非常困惑!感谢...

1 个答案:

答案 0 :(得分:3)

没关系 - 我想出来了。

问题在于这一行

$('.carousel').append( ' <%= j render(@recently_added_video) %>' );

在users / index.js.erb文件中。

我正在关注railscast,但是Ryan Bates将他的实例变量设置为渲染部分,所以他的代码可以工作,但是因为@recently_added_video不是部分的而且不会渲染,所以它返回了500错误因为没有部分可以找到。

我需要做的是实际渲染这样的部分:

 $('.jcarousel-skin-recent').append(' <%= j render ('shared/recentlyadded') %>');

希望能帮助其他任何跟踪过railscast并且遇到类似问题的人。