注:ここでは、私が行っていることのロジックを示しています。
私がしていること:
商品を一覧表示し、ページ付けを行う基本的なインデックスアクションについて考えてみてください。ここでremote-trueオプションを使用して、ajaxベースのページネーションを有効にしました。これまでのところ、物事は完全にうまく機能しています。サンプルコードを見てください。
製品コントローラー:
def index
@products = Product.paginate(:order =>"name ASC" ,:page => params[:page], :per_page => 14)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @products }
format.js
end
end
Index.html.erb
<h1>Products</h1>
<div id="products">
<%= render "products/products" %> // products partial is just basic html rendering
</div>
<script>
$(function(){
$('.pagination a').attr('data-remote', 'true')
});
</script>
Index.js.erb
jQuery('#products').html("<%= escape_javascript (render :partial => 'products/products' ) %>");
$('.pagination a').attr('data-remote', 'true');
だから問題は何ですか:
ここで、これに対してアクションキャッシングを有効にします。しかし、index.js.erbファイルはDOMを操作していません。remote-true機能を削除すると、キャッシュで問題なく動作します。
アクションキャッシングのために、コントローラーの上部に次の行を追加しました。
caches_action :index, :cache_path => Proc.new { |c| c.params }
助言がありますか?
アップデート:
問題は、jqueryコードが実行されていないことです。この質問から
何が悪いのかわかりました。jQueryは実際に着信スクリプトをで囲み、ブラウザが着信コードを評価するようにします。ただし、キャッシングメカニズムはコードをテキストとして保存するだけであり、1回再リクエストすると、コードはテキストとして返されますが、評価はされません。したがって、コードを明示的に評価する必要があります
しかし、この問題を解決するにはどうすればよいですか?