2011-01-14 11 views
2

私は電子メールの購読、調査、およびコメントフォームをサポートするアプリケーションを持っています。私はそれぞれ(サブスクリプション、SurveyResponse、Comment)のモデルを持っています。名前、電子メール、電話などの共有情報を保存するVisitorモデルもあります。匿名ユーザーの追跡

私はモデルをどのように結びつけるのがベストかと思います。各モデルとVisitorモデルとの間に1対1の関連付けを使用すると、各イベントが個別に処理されます。だから、John Doeがコメントとアンケートを投稿した場合、彼は訪問者テーブルに2つのレコードを取得します。私はこのアプローチに傾いています - それは簡単です。

一方、電子メールの一意性制約を持つVisitorに対して一対多の関連付けを設定できました。私は、既存のレコードに各イベントを結びつける試み、のようなものでした:私は右のレコードを取得していますことを確信することができませんので、

@visitor = Visitor.find_by_email(params[:email]) || Visitor.new(params) 

このアプローチは問題と思われます。 2人の異なるユーザーが「[email protected]」を使用してコメントを送信するとどうなりますか?可能性は低いですが、可能です

この問題にアプローチするより良い方法はありますか?

いくつかの明確化:

  • 私が今まで通常のサイト訪問者のための本格的なユーザー・アカウントを持っていることを計画していませんよ。

答えて

1

フル・ユーザー・システムを持つことや電子メール・アドレスを確認することを決して決して考えていないのであれば、1対1の関連付けを行う方がよいでしょう。訪問者モデルのフィールドを他のテーブルにハードコーディングするのと本質的に同じですが、繰り返しを減らします。同じメールアドレスが異なる名前、電話番号などをサイト全体に持つことができても気にしない場合は、それに固執してください。

名前、電話番号などを常に最新のものにしたい場合は、何かを送信するときに訪問者テーブルの更新を行います。

便宜上、Cookieを使用してフォームフィールドをあらかじめ入力することはできますが、他のコンピュータやブラウザで競合する情報の入力を妨げるものではありません。

+0

gregありがとうございました。これは、私がすでに考えていたことに対するいくつかの追加サポートのようです。私は将来的にクッキーを追加するかもしれませんが、できるだけシンプルに保つつもりです。 – dojosto

0

私の提案は、との永続的なCookieを保存することです

  • 検証が(コメントはコメント欄にテキストを必要とし、新しいサブスクリプション電子メールが送られていることを確認しますが、ほとんどのフィールドはオプションです)非常に最小限でありますランダム/一意のIDをクライアント側で取得し、それを使用してユーザーを追跡します。

    ユーザが既知のユーザ(ログイン済み)の場合、そのIDを多対1の関係のuserIdにリンクできます(ユーザが別のコンピュータからログインする可能性があります)。

  • 関連する問題