これを読んでくれてありがとう!
さて、これは私がやろうとしていることです。データベース内の情報を表示するテーブルを表示するRailsアプリがあり、テーブルを自動的にリロードする必要があります(部分的なリロードで可能であれば、そうする必要はありません)ページ全体をリロードします。) 新しいデータがデータベースに追加されたとき。
前もって感謝します!
これを読んでくれてありがとう!
さて、これは私がやろうとしていることです。データベース内の情報を表示するテーブルを表示するRailsアプリがあり、テーブルを自動的にリロードする必要があります(部分的なリロードで可能であれば、そうする必要はありません)ページ全体をリロードします。) 新しいデータがデータベースに追加されたとき。
前もって感謝します!
テーブル データをリロードできるようにするには、最初にコンテンツが変更されたことをクライアントに通知してから、実際にコンテンツをリロードする必要があります。これを実現するには、クライアント側で Javascript/Ajax を使用する必要があります。
jQuery は Rails に同梱されており、Ajax 部分を非常に効率的に処理します。古いコンテンツを新しいコンテンツに置き換えるには、jQuery.ajaxおよびjQuery.replaceWithを参照してください。
テーブルを提供するコントローラー アクションでパラメーターを使用して、Ajax から呼び出されたときにレイアウトのレンダリングを無効にできるようにします。このようにして、コントローラーは関連するコンテンツ (テーブルを含むビュー) のみを提供します。
私はこのようにアプローチします:
setInterval(function(){
$.get("/catalog/1/new_items.js", function(data){
$("new_items").html(data);
},
"html")
}, 30000);
new_items.js.erb の内容:
<%= render partial: 'new_items', object: @catalog.new_items.last, as: :item %>
上記のパーシャルを好きなように作成します (パーシャルが必要ない場合は、div の内容全体を new_posts.js.erb ファイルに書き込むことができます)。
@catalog
などを定義するカタログ コントローラーに最新のメソッドを追加してlatest.js.erb
、使用します。
route.rb に get '/latest' を追加します