使用awesome_nested_set的邮箱对话视图

时间:2014-12-09 21:29:19

标签: ruby-on-rails activerecord tree awesome-nested-set

我正在使用awesome_nested_set来构建邮件会话。我有两个邮箱(收件箱和已发送),现在我想构建一个正确的对话视图。主要目标是在目标邮箱和根的最后一个叶子中具有任何后代的选择根,以便在对话的列表页面上查看。 我的留言模型:

class Message
 belongs_to :mailbox
 acts_as_nested_set
 ...
end

E.g。如果我选择了收件箱,我会选择:根目录,那些包含属于收件箱的邮件。 我如何选择?我是否需要构建一个具有message_id,mailbox_id,unique_thread_number的Conversation模型?

1 个答案:

答案 0 :(得分:0)

我会反过来......选择消息然后扎根。

messages=Message.where(mailbox: "inbox").map(&:id)
roots=Message.where('id in (?)',Message.where('id in (?)',messages).map {|p| p.root.id})
leaf_ids = roots.map {|p| p.leaves.last.id if p.leaves.any?}
leaves=Message.where('id in (?)', leaf_ids)

在上面的逻辑中,我没有使用任何过滤,这意味着在开始时我为messages中的所有inbox选择ID ...我想你必须添加一些过滤({{ 1}}子句缩小结果。

然后,您获得这些消息的where

然后,你得到那些根的roots

您想要的可见消息将是leaf_ids

<强>更新 现在我已经看到了,你可以用更少的一步(如果你不需要自己的根)来做到这一点:

leaves