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

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

比如我有个需求,每个人(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)字段来存放排序信息。 想法对么? 另外偶是新人,顺道求问有没有已经实现好的轮子。。。

共收到 11 条回复

通过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的话,甚至读取不到整体留言的数量)

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