3

多くのモデルを持つ既存のアプリがあります。スパマーやその他の不正なユーザーを排除することを主な目的として、それらを作成したユーザーのIPアドレスをログに記録したいと思います(ユーザーが使用しているIPアドレスがわからない場合は、次のことができます)それをブロックしないでください)。ユーザーが自宅、オフィス、電話などからアクセスする可能性があるため、これらを長期にわたって追跡する必要があり、使用パターンを確認したいと思います。また、ユーザーがどこからアクセスしているのかなどを把握するのも楽しいかもしれませんが、現時点では、副作用は純粋に考え抜かれたものです。

ユーザーセッションを保存するためにCookieベースの方法を使用します。

これを行うには2つの方法が考えられます(人々が投票できるように返信として作成します)。

  1. すべてのモデルにIPアドレス属性を追加し、それを渡します
  2. オブザーバーまたはafter_saveコールバックで呼び出されるある種のロガーモデル

考え?より良い方法はありますか?これを行うプラグイン?ありがとう!!

4

3 に答える 3

2

オブザーバーまたはafter_saveコールバックで呼び出されるある種のロガーモデル

長所:

  • オブザーバーを介して実行できるため、モデルを意識する必要はありません
  • すべてのロギングは1つのモデル/データベーステーブルで行われるため、後でレポートをクエリして実行するのは簡単です。

短所:

  • すべてのModel.createを変更せずにIPアドレスを取得するにはどうすればよいですか?私はMVC理論を破らなければなりません。それは私が喜んで行うことですが、どうすればよいのかよくわかりません。
于 2009-01-25T21:40:31.977 に答える
2

これにはポリモーフィックな関連付けを使用し、追跡する必要があるすべてのモデルに適用できます。これにより、すべてのモデルに IP アドレス列を追加する手間が最小限に抑えられ、コードベース全体の重複の量が大幅に削減されます。次に、オブザーバー ルートに進むことが、おそらくモデルに接続する最も簡単な方法です。

于 2009-01-26T00:34:21.970 に答える
1

すべてのモデルにIPアドレス属性を追加し、それを渡します

長所:

  • 概念的には単純です。属性があり、投稿123がユーザー222 w /IP123.123.123.123によってアップロードされたことが簡単にわかります。

短所:

  • すべてのモデルとすべてのModel.createをタッチ/再コーディングする必要があります(Model.create params [:model]のrailsイディオムを使用しているため、request.addressを追加するだけです)。これはたくさんの仕事です。多くのテストを書き直す必要があります
  • IPv6に移行した場合、これは失敗します(モデルがIPv4アディを期待している場合)
于 2009-01-25T21:39:03.213 に答える