2

これを読んでくれてありがとう!

さて、これは私がやろうとしていることです。データベース内の情報を表示するテーブルを表示するRailsアプリがあり、テーブルを自動的にリロードする必要があります(部分的なリロードで可能であれば、そうする必要はありません)ページ全体をリロードします。) 新しいデータがデータベースに追加されたとき。

前もって感謝します!

4

2 に答える 2

2

テーブル データをリロードできるようにするには、最初にコンテンツが変更されたことをクライアントに通知してから、実際にコンテンツをリロードする必要があります。これを実現するには、クライアント側で Javascript/Ajax を使用する必要があります。

  • JSON で最後に更新されたタイムスタンプを返すアクションをコントローラーに追加します。
  • タイムスタンプを JS 変数に保存する
  • ローカルとリモートのタイムスタンプを比較できるように、n 秒ごとにアクションを呼び出します。
  • Ajaxを使用して、テーブルの部分を更新されたものに置き換えます

jQuery は Rails に同梱されており、Ajax 部分を非常に効率的に処理します。古いコンテンツを新しいコンテンツに置き換えるには、jQuery.ajaxおよびjQuery.replaceWithを参照してください。

テーブルを提供するコントローラー アクションでパラメーターを使用して、Ajax から呼び出されたときにレイアウトのレンダリングを無効にできるようにします。このようにして、コントローラーは関連するコンテンツ (テーブルを含むビュー) のみを提供します。

于 2012-09-29T12:18:47.873 に答える
1

私はこのようにアプローチします:

  • Javascript の setInterval 関数を jQuery の $.get() 関数と共に使用して、/catalog/1/new_items などのページを読み込みます。

setInterval(function(){
$.get("/catalog/1/new_items.js", function(data){
$("new_items").html(data);
},
"html")
}, 30000);

  • new_items.js.erb を作成し、app/views/posts フォルダーに配置します。

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' を追加します

于 2012-09-29T12:28:08.150 に答える