我有两个模型:用户和通知。
User has_many :notifications
Notification belongs_to User
这是通知的描述代码
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | YES | | NULL | |
| namespace | varchar(255) | YES | | NULL | |
| key | varchar(255) | YES | | NULL | |
| value | tinyint(1) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
这些是一些通知示例:
+----+---------+-----------+-----------------+-------+
| id | user_id | namespace | key | value |
+----+---------+-----------+-----------------+-------+
| 4 | -1 | facebook | launch_campaign | 1 |
| 5 | -1 | facebook | add_video | 1 |
| 6 | -1 | facebook | add_image | 1 |
| 7 | -1 | twitter | add_image | 1 |
| 8 | -1 | twitter | add_video | 1 |
| 9 | -1 | twitter | launch_campaign | 1 |
| 10| 21 | facebook | add_video | 0 |
| 11| 1 | facebook | add_image | 0 |
| 12| 10 | twitter | add_image | 0 |
| 13| 12 | twitter | add_video | 0 |
+----+---------+-----------+-----------------+-------+
user_id = -1 的行是默认值,每次用户覆盖默认值时,我都会为该用户添加一行以及命名空间和操作以及覆盖的值。
现在,如果我这样做,我会发怒
User.notifications
我只会获得其中包含 user_id 的通知,但我还想获得用户尚未覆盖的默认通知 (use_id = -1)。任何想法如何做到这一点?还感谢有关此设计/主题的更多建议:)!
这也是我设计 数据库+数据模型设计模式的更详细的解释