0

Railsアプリケーションに、時間の経過に伴うフォロワーの傾向を示す機能を構築したいと思います。

現在、私の次の方法論には、関係オブジェクトの作成と破棄が含まれます。followingは、フォロワーのIDを使用してオブジェクトを作成し、followingとunfollowingはその関係オブジェクトを削除します。

フォローを解除するとリレーションシップオブジェクトが削除されるため、いつでもフォローに戻ってフォロワーが何人存在したかを確認することはできません。

これを解決するために、私が考えることができる最良の解決策はこれです:

フォローを解除するときにリレーションシップオブジェクトを削除する代わりに、たとえば-1の負の値を持つ新しいオブジェクトを作成します。以下は、+1の正の値を持つオブジェクトを作成します。したがって、特定のペアの合計値を合計すると、それらが現在フォローしているかどうか(1または0)が得られますが、過去の傾向は、特定のフォローの合計フォロー値を合計することによって計算することもできます。

私の質問は:これはこの問題の最もエレガントな解決策ですか?それを行う簡単な方法はありますか?cronジョブを使用して日次の数値を出力することは可能ですが、データが重複しているようです。他に何か提案はありますか?

どんな助けでも大歓迎です!

4

2 に答える 2

1

アクティブフィールドを追加してから、リレーションシップレコードを削除する代わりに、レコードを非アクティブに設定します。次に、アクティブ= 1を反映するように、ユーザー向けのすべてのクエリを更新する必要があります。次に、レポートの目的でアクティブ=0のレコードを使用できます。レコードが非アクティブ化された日付を格納するdeactivate_atフィールドを追加することもできます。

シナリオの例は、ユーザー1がユーザー2をフォローし、ユーザー3をフォローし、ユーザー4をフォローし、ユーザー2をフォロー解除し、ユーザー2を再フォローし、ユーザー4をフォロー解除する場合です。

follower_id followed_id active created_at deactivated_at
1           2           0      9/10/2012  9/13/2012
1           3           1      9/10/2012  NULL
1           4           0      9/10/2012  9/17/2012
1           2           1      9/16/2012  NULL
于 2012-10-02T22:43:36.667 に答える
1

ただ使うparanoia

https://github.com/radar/paranoia

class Relationship < ActiveRecord::Base
  acts_as_paranoid

  ...
end

(2 つの数値 ID 列に一意のインデックスがある場合は、それを削除し、プレーン インデックスを使用します)

その後、あなたが持つことができます

def currently_following_count(uid)
  Relationship.where(:followed_id => uid).count
end

def historical_following_count(uid)
  Relationship.unscoped.where(:followed_id => uid).count
end
于 2012-10-02T23:16:26.280 に答える