Rails 多表联结后,不同父对象的子对象可以从头排序么

palytoxin · 2013年11月12日 · 最后由 palytoxin 回复于 2013年11月14日 · 2480 次阅读

比如我有个需求,每个人 (person) 都有单独的留言 (message 表) person has_many message 现有 A、B 两人 给 A 留言一次 message id1 => 给 a 的留言 给 B 留言一次 message id2 => 给 b 的留言 给 A 留言一次 message id3 => 给 a 的第二次留言

有没有现成的解决方案,让给 A 留言第二次时能保存“这是第二次给 A 留言”这种信息?

看过 redmine 的代码,project 中提交 issue 的情况类似,不同项目用同一个 redmine 管理,提交缺陷的时候,缺陷 id 是全局增长的,这其实不太符合逻辑?

==== 想了下,在 message 表中保存另外的(message id by person)字段来存放排序信息。 想法对么? 另外偶是新人,顺道求问有没有已经实现好的轮子。。。

通过 A.messages 就可以获取到所有给 A 的留言的对象数组,并且是按照 message 的 id 顺序排好的

嗯,谢谢。不过我想实现的是,在某人给 a 留言后,系统主页有全局动态:a 用户三楼留言是 xxxxx,这样如果留言被删掉,id 中也会空出字段,一楼二楼 然后四楼,三楼被删掉了。 请教下,类似你说的全部查出再编号显示,性能上会有问题吗?

使用 redis 可以吗?我也不懂

多看看文档,提升很快的。

没看明白你具体想要实现什么。“这是第二次给A留言” a.messages.order("created_at ASC")[1]

@raven 抱歉,可能表达上比较绕 全局2号 全局3号

类似这样,在 redmine 中,不同的项目提交 issue 之后,可以看到 bug 的编号是全局递增的。 如何让他只在本身的 project 下递增?就是说这个项目第一次递交 bug,那么前面的编号是#1 可以看到 url 已经是 ip/redmine/project/:id/issues 的形式 但是编号却是全局的,方便实现或者有现有的解决方案么?

#6 楼 @palytoxin 不熟悉 redmine 所以现有的解决方案我不清楚,不过既然你是改动他,风险最小的就是用其它的字段代替ID,:scope => :project

#6 楼 @palytoxin 1、增加一个 plugin,在里面增加一个字段,2、复写这个 view,3、复写 save 方法,自动计算这个显示 ID。

redmine 不能要求它太多。

#2 楼 @palytoxin 首先一个小建议,回复别人的时候@一下,不然真不知道。 然后,感觉你这个编号只是需要在列表页面显示一下,如果是那样的话,直接在页面上写一个编号循环输出不就好了,反正排序都是排好的。

@liwei78 谢谢,感觉第三种方法在 save 的时候做处理比较好

#9 楼 @lionzixuanyuan 呃,接受建议= = 确实论坛上发言比较少,不大会用 其实不只是在页面需要,如果留言或者 issue 过多,并且想和别的项目 issue 混合做一个项目整体动态页面,那么整体查出再排序其实很耗资源(用 limit 的话,甚至读取不到整体留言的数量)

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