用户有很多任务。(tasks.user_id = user_id)
任务有很多标签(通过Acts as taggable on
用户有很多列表 -> 有很多任务(一个列表只是多个标签的包装,例如 {List id => 1, name => "shopping holiday summer"} 将检索所有标记有所有这些标签的任务)
例如,如果用户访问 url tags/shopping%20vacation,我的代码会查找:
Task.all.tagged_with(["shopping", "vacation"])
task.list_id 没有查找表或外键
我希望用户能够与其他用户共享任务、列表和标签。
共享任务的用户仅与其他用户共享该任务。
共享列表的用户会向其他用户打开该列表中的所有任务。
共享标签的用户将使用该标签标记的所有用户任务打开给另一个用户。
对我来说,有几个选择,我想就每个我可能没有想到的优缺点提供一些意见。
一个是每个可共享项目的不同表:
shared_tasks:task_id、shared_to_id(或 user_id) shared_lists:list_id、shared_to_id shared_tags:tag_id、shared_to_id
OR:多态关联
可共享:shared_id(item_to_share)、shared_to_id、shared_type
各自的优缺点是什么?
还有其他我没有想到的解决方案吗?