3

私は無限のページでrailscastをフォローしており、以前はwill_paginateでも同じことをしていましたが、エラーが発生していますが、特定の状況で実装しようとしています. will_paginate gems は完全に機能し、Chrome で開発者ツールを読んでわかる限り、dom への jQuery 呼び出しも同様です。問題は何が返されるかということです - 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_video呼び出そうとしているインスタンス変数は で定義されてapplication_controllerおり、パーシャル および で正常に動作しwill_paginateます。

誰が何が問題なのかを理解するのを助けることができますか? 非常に混乱!ありがとう...

4

1 に答える 1

3

気にしないでください-私はこれを理解しました。

問題はこの行にありました

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

users/index.js.erb ファイルにあります。

私は railscast をフォローしていましたが、Ryan Bates はパーシャルをレンダリングするようにインスタンス変数を設定しているので、彼のコードは機能しますが、@recently_added_video はパーシャルではなくレンダリングされないため、500 エラーが返されました。パーシャルが見つかりません。

What I needed to do was actually render a partial like this:

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

Hope that helps anyone else who follows the railscast and has issues like I did.

于 2012-12-19T22:32:57.053 に答える