0

レンダリングテンプレートファイルを含むindex.htm.erbファイルがあります。

<div id="product"> <%= render :template => "shop/products" %> </div>

そのコントローラーで私は持っています

  def index
    @products = Product.paginate :page => params[:page], :per_page => 6 
  end

index.htmlファイルの下部にjsファイルがあり、will_paginateurlを取得するためのスクリプトが含まれています。

$(window).scroll(function(){
        if( $(this).scrollTop() > ( ( $(document).height() - $(this).height() ) - 50 ) ){
            var link = $('.pagination .next_page').attr('href');
            $.getScript( link );
        }


        });

index.html.erbと同じ名前のjsファイルへのこのgetScript呼び出し。したがって、そのindex.js.erb。js.erbファイルの中に私は

console.log("products = ", @products);

インスタンス変数を取得しようとするとエラーが発生します。500内部サーバーエラー@products変数にアクセスできません。この変数にアクセスするにはどうすればよいですか。

更新しました:

http://railscasts.com/episodes/114-endless-page-revised?autoplay=trueの同じチュートリアルを使用してい
ますが、唯一の違いは、index.html.erb内のテンプレートを使用していることです。チュートリアルでインスタンス変数にアクセスする方法がわかりませんが、わかりません

4

2 に答える 2

1

答えを無視する

私は RoR にあまり詳しくないので、この状況を少し誤解しているかもしれませんが、それでもあなたを助けたいと思っています。これが私の推測です:

これは実際には RoR に関連するものではありませんが、バックエンドからフロントエンドへの一般的な質問です。JavaScript は完全にブラウザーで実行されますが、Rails はサーバー上でのみ実行されます。したがって、JS は、Ruby 環境内で定義されたすべての変数を認識していません。JS で変数にアクセスできるようにしたい場合は、何らかの方法でページに書き込む必要があります。

簡単に例を挙げると、これに沿って何かをする必要があります。

<script>
    var productName = "<%= @product.name %>";
</script>

<%= @product.name %>したがって、Rails は html を解析し、その部分を実際の名前に置き換えます。したがって、ブラウザーは次のような html を取得します。

<script>
    var productName = "Ice Cream";
</script>

これは、バックエンドからフロントエンドに変数を渡すことができる非常に単純な方法の 1 つです。

于 2012-12-11T04:00:12.910 に答える
0

@products変数を明示的にテンプレートに渡してみてください。

<%= render :template => "shop/products", :locals => {:my_products => @products} %>

次に、現在使用しているテンプレートmy_products内の変数を使用します。shop/products@products

于 2014-12-09T14:06:49.163 に答える