2009-08-03 6 views
1

私のアプリケーションには、ニュース、投稿、コメントなど、さまざまな一般的なものがあります。私は、ユーザーが「4つの新しい投稿」とその種類のもので挨拶できるように、ユーザーが見た内容を把握できるようにしたいと考えています。明らかにそれは部分的にしかとして良いことだデータベースの「新しい」アイテム(投稿、コメント、電子メールなど)を追跡する - Ruby on Rails

Post.find(:all, :conditions => [ "updated_at > ?", session[:user_last_login]]).length 

:私はちょうどのようなもので「新しい記事」の数を報告してる瞬間

私がアプリケーション全体を混乱させる前に、私が説明したことを達成するための最も簡単な方法はありますか?また、レールには何か助けてもらえますか?

また、グーグルグーグルに役立つこの種の機能には共通の名前がありますか?

ありがとうございました。

答えて

0

ユーザーがどの投稿を閲覧したかを把握する必要があります。ユーザーが順番に投稿を表示する必要がある場合は、最後に表示されたものを追跡するだけです。彼らが順不同で見ることができるなら、あなたは特定の投稿を見たかどうかを示す関係を保つ必要があります。 「新しい」投稿を取得するには、現在のユーザーのテーブルに一致するリレーションを持たない投稿を選択します。明らかに、ユーザーが投稿を閲覧するたびに、ユーザーの閲覧履歴を追跡するために使用している列または関係を更新する必要があります。

0

正確にはtvanfossonと言っています。ユーザーがログインしてもあなたの例は失敗しますが、未読メッセージを表示しないためです。

投稿のデフォルト値をnewに設定し、最初のレンダリング時にviewedに設定します。 Ruby on Railsでは、最初のレンダリングは通常showアクションです。

2

これに対するかなり一般的なアプローチは、ユーザーがいつ特定のオブジェクト(またはオブジェクトのコレクション)を最後に表示したかを把握することです。その後、オブジェクトの表示を追跡したいオブジェクトにcreated_atまたはupdated_atがあれば、ユーザーが最後にニュースアイテムを閲覧してから変更された投稿の数を数えることができます。

だから、あなたのようなクラスがある可能性があります:NewsItemTrack.trackは、ユーザーが問題のニュース項目を見たことが記録されます

class NewsItemTrack < ActiveRecord::Base 

    belongs_to :news_item 
    belongs_to :user 

    def self.track(news_item_id, user_id) 
    nt = self.find_by_news_item_id_and_user_id(news_item_id, user_id) 
    if nt.nil? 
     nt = self.create(:news_item_id => news_item_id, :user_id => user_id, :last_viewed_at => Time.now) 
    else 
     nt.update_attribute(:last_viewed_at, Time.now)  
    end 
    end 

    def new_comment_count 
    Comment.count(:all, :conditions => ['news_item_id = ? and created_at > ?', self.news_item_id, self.last_viewed_at] 
    end 
end 

。あなたはあなたがしたいニュース項目にありますどのように多くの新しいコメントを取得したいときに、:

NewsItemTrack.find_by_news_item_id_and_user_id(123, 456).new_comment_count 
1

私は、多型の関係で結合テーブルを使用します - プラグイン(宝石?)has_many_polymorphsを使用。

「ビューイング」という名前の結合テーブルと関連モデルの表示を持つことができます。 h_m_pは、 'viewed_posts'、 'viewed_comments'、 'viewed_news'などのメソッドを提供します(ニュースは悪いモデル名です。newsItemという名前のnewsItemなどのような単なる単語でなければなりません)。

Googleのメインページにはhas_many_polymorphsがありますが、例やものがあります。

関連する問題