Redis 类似老师留作业的功能怎么实现

fengfans · 2014年02月15日 · 最后由 ihlayy 回复于 2014年03月26日 · 7786 次阅读

笔者开发一个小系统,有一个公共文档库,以数据表的形式记录标题、内容、关键词等字段,每个用户都可以浏览该表。 用户有两类,普遍用户,辅导者。 普通用户维护一个私有文档库 (数据表),其他普通阅读者无法浏览,但辅导者可以浏览。 希望实现如下功能: (1)辅导者可以向公共文档表中添加文档,并且可以向普遍用户推荐。 (2)普遍用户者登录后,可以在自己私有文档库中看到辅导者推荐的文档已经添加至列表中。 (3)辅导者可以向多名普通用户推荐同一文档。

我的思路, 怎样将公共表中的一个文档引用至其他私用表中,是要解决的根本问题。 是否将公共表与私有表建设一对多关联,在私有表中引用的文档 ID 为公共文档 ID,将公共文档的 ID 添加至私有表中即可。批量添加还要再考虑一下,请问这个思路是不是对。

描述完毕,请大家给些帮助。

这里应该没有人会愿意回答这个问题。 你这个问题根本不是一个问题, 而是让人免费给你干活。 怎么把业务抽象成程序是你的任务。 但是你有程序上的问题, 比如怎么实现权限系统, 大家应该乐意回答。

谢谢指导,我说得具体点,见上文。

感谢@bydmm兄弟,其实我每次发的帖子,大家的回复无论是什么内容,都会激发的大脑,拓展我的思路,对我解决问题提供有益的帮助,您的回复也让我一下子有了思路,对此我表示真诚的谢意。

document id owner_id title content keyword created_at type(private,public) status

user id email password type(teacher,student)

document_recommend id document_id to_user_id document_owner_id

即然用 redis,只要考量怎么设 key, 关联表总会徒增查询的负担。

$redis = Redis.new doc:1:users 为 set user:1:docs 为 set

在 controller 里只有辅导者可以执行的动作:

def doc_to_user(doc,user)
  $redis.multi do
    $redis.sadd "doc:#{doc}:users",user
    $redis.sadd "user:#{user}:docs",doc
  end
end

在 view 里: 普遍用户里所有的文档 ID: docs = ($redis.smembers "user:#{current_user}:docs") 普遍用户与辅导者的登入,其实切成两个网站就很单纯, 也不需要在数据表上区分身分,又在身分上区分可以做什么动作。

如果不能区分成两网站,那也只要区分 /user, /admin 两个各为不同的 controller。 如果普遍用户及辅导者一定要在数据表内, 最多在 admin 里指定哪些 user 的登入是有效的, 而不需要在 user 身分上又多出什么身分的区别。

db 如果是 redis 的话,也不需要多大改动,原则就是实体用 hash 结构,关系可以用 set

hash: document user

set public_document user_:id_document admin_user normal_user document_:id_recommend_user user_:id_recommend_document

需要 登录 后方可回复, 如果你还没有账号请 注册新账号