2

すべてのユーザーが受信するメールの種類を決定できる機能を実装したいと考えています。これまでのところ、ユーザーがフレンドシップ リクエストを受信したときと、新しいメッセージを受信したときにのみ、ユーザーがメールを受信して​​いることがわかります。これを実装する予定の方法は次のとおりです。

  1. 各ユーザーhas_oneのメール設定
  2. EmailPreferences テーブルには、Friendship (ブール値) と Message (ブール値) の 2 つの列があります。
  3. デフォルトでは、それらは true になります。したがって、ユーザーは、受信した新しいメッセージと新しいリクエストの両方について電子メールを受け取ります。
  4. ユーザーは、[編集] アクションに移動し、選択に従って値を更新できます。
  5. メール送信メソッドの前または前にif statement確認するを使用する予定です。@user.emailpreference.message?@user.emailpreference.friendship?

これが最善の方法であるかどうかを知りたいです。

4

3 に答える 3

4

いくつかの考慮事項 - has_one を実行するか、単に列をユーザーに追加するかを質問します。また、ブール値の代わりに日付を使用する傾向があるため、ブール値がいつ設定されたかがわかります。ネーミングは「友情」や「メッセージ」以外を考えて。ユーザーの属性である場合、「subscribed_to_friendships」や「subscribed_to_messages」などを検討します。

一般的に has_one を避ける理由は、非常に単純なクエリを作成し、メンテナンスの必要性を減らすためです。メッセージを受信する必要があるすべてのユーザーを取得し、それらをループする可能性があります。私は結合を避けてシンプルに保つことを好みます。また、子で false と null が同じであることもあまり好きではありません。これは、特にデフォルトが true であり、デフォルトでほとんどのユーザーの設定を作成する場合に、設定レコードの削除/追加を回避するのに役立ちます。

于 2013-04-02T18:25:14.047 に答える
1

このアプローチの問題点の 1 つは、明日、より多くのタイプが設定されている場合、メールを送信するよりも誰かが参加することを意味し、その場合は列をもう 1 つ追加する必要があることです。それをさらに正規化し、より多くのテーブルを使用して Preference タイプを格納してみませんか

             Id Name
             1  Friendship
             2  Message

             Id  User Id Flag
             1      1     TRUE
             2      1     False

これは、ユーザー 1 がフレンドシップを選択し、メッセージを選択していないことを意味します。これで、新しい設定を簡単に追加できます。

于 2013-04-02T18:36:03.863 に答える
0

https://stackoverflow.com/users/177489/swardsによるアプローチは私にとって最適なオプションです。これは、 has_one クエリが後で混乱する可能性があるためです。ユーザー モデルと gg に列を追加します。

于 2016-05-19T14:36:35.850 に答える