0

投稿を読んでいる人のリストを表示したい。関数を実装しようとする前に、アドバイスを求めたいと思いました。showでアクションを呼び出すユーザーをチェックすることから始めPostsControllerます。人が投稿を閲覧するたびに、投稿を読んでいる人のリストに記録されます。ただし、投稿を読んでいないときにその人をリストから削除する方法がわかりません。ユーザーが特定のページから移動したかどうかを使用または通知する方法はありますか? 少しの助けがあれば、すぐに始めることができます。cookiessessions

アドバイスをいただければ幸いです。ありがとうございました!

4

2 に答える 2

2

より正確に

routes.rb で

post "/posts/:id/being_read" => "posts#being_read", :defaults => { :format => "json"}

コントローラーで

PostsController < ApplicationController
  def being_read
    current_user && @post.being_read_by current_user
    head :ok
  end
end

番組ページで

function beingRead(){
  $.post("/posts/<%=@post.id%>/being_read", function(data) {
    setTimeout(beingRead,10000);
  });
}

post.rbで

def being_read_by user=nil
  # making use of rails low level cache

  readers_ids = Rails.cache.fetch("Post #{id} being read", :expires_in => 5.minutes) || []

  readers_ids = Rails.cache.fetch("Post #{id} being read", :expires_in => 5.minutes) (readers_ids << user.id) if user

  readers_ids
end
于 2013-04-05T09:38:09.550 に答える
2

通常、タイムアウトのシステムが使用されます。

「投稿を読んでいる」というブール値を保存するのではなく、ユーザーが投稿を読んだ日付を保存できます。

いいえ、タイムアウト (たとえば 5 分) を簡単に設定して、誰が投稿を読んでいるかを知ることができます。これは概算ですが、ほぼ現実的です。

利点:

  • ビューごとに 1 つではなく、1 つのクエリを使用して、必要に応じて (cron、毎日、またはその他のものを使用して) 終了日を削除できます。
  • ユーザーがブラウザを閉じる問題を解決します (次のページが開いていない場合)。
于 2013-04-05T09:28:23.770 に答える