Ruby on rails 如何订购邮箱收件箱?
我在rails应用程序中使用Ruby on rails 如何订购邮箱收件箱?,ruby-on-rails,ruby,ruby-on-rails-4,mailboxer,Ruby On Rails,Ruby,Ruby On Rails 4,Mailboxer,我在rails应用程序中使用mailboxergem,我想对收件箱中的消息进行排序,这样当用户收到一条新消息时,我希望收到一个通知或跟踪哪些消息已被读取,哪些消息未被读取,并将未读/新消息排序在页面顶部 这是我的对话控制器 class ConversationsController < ApplicationController before_action :get_mailbox before_action :get_conversation, except: [:index]
mailboxer
gem,我想对收件箱中的消息进行排序,这样当用户收到一条新消息时,我希望收到一个通知或跟踪哪些消息已被读取,哪些消息未被读取,并将未读/新消息排序在页面顶部
这是我的对话控制器
class ConversationsController < ApplicationController
before_action :get_mailbox
before_action :get_conversation, except: [:index]
def index
@unread_messages = @mailbox.inbox(unread: true).count
@conversations = @mailbox.inbox({page: params[:page], per_page: 10})
end
private
def get_conversation
@conversation ||= @mailbox.conversations.find(params[:id])
end
def get_mailbox
@mailbox ||= current_user.mailbox
end
end
但它没有起作用
请提出一个解决方案。好的-所以我只需要浏览一下这里的文档
\u read
在其他地方为您工作过吗?我可以找到的方法和属性是#标记为已读
和收据。是否未读?
;您是否尝试过通过is\u unread
进行组织,或者尝试过在控制台中对此进行一些调试
以下是我一直在挖掘的资源:
我相信您正在寻找的是以下内容:
@conversations = @mailbox.inbox.select('mailboxer_conversations.*, bool_and(is_read) AS all_read').group('mailboxer_conversations.id').order('all_read ASC')
我不知道这个宝石。这是我的2美分 为了对消息进行分页,Mailboxer必须在内部指定SQL顺序。要知道它的顺序,请查看Rails日志。我想你会得到类似于在DESC,mailboxer,receipts.is\u read创建的
订单(我已经添加了你的订单)
要更改此优先级,您必须对查询进行无序排序,并首先放置is\u read条件。您可以通过以下方式完成此操作:
@对话=
@信箱
.收件箱(
第页:参数[:第页],
每页:10
).joins(:收据)
.选择(“邮箱地址对话。*,邮箱地址收据。*”)
.reorder('mailboxer\u receipts.is\u read,无论您在SQL查询中拥有什么')
希望这有助于。。。
祝你今天过得愉快:)
编辑:
通过查看Mailboxer Gem,我确认存在内部订单():查看参与者和收件箱范围
范围:参与者,lambda{124;参与者|
其中('mailboxer\u notifications.type'=>mailboxer::Message.name)。
订单(“mailboxer_conversations.updated_at DESC”)。
joins(:receives).merge(Mailboxer::receive.receiver(participant)).uniq
}
范围:收件箱,lambda{|参与者|
参与者(参与者).merge(邮箱:receive.inbox.not_trash.not_deleted)
}
此外,您只需在收件箱呼叫前写下订单,即可正常工作:
@对话=
@信箱
.order('mailboxer\u receipts.is\u read')
.收件箱(
第页:参数[:第页],
每页:10
).joins(:收据)
.选择(“邮箱地址对话。*,邮箱地址收据。*”)
试试这个
def index
@unread_messages = @mailbox.inbox(is_read:false).count
@conversations = @mailbox.inbox.page(params[:page]).per(10)
end
默认情况下,收件箱被排序为在顶部显示最新邮件,例如,当您键入@mailbox.inbox时。首先
您实际上正在提取最后一封(最新)邮件。您可以通过执行以下操作来选中“收集所有未读邮件”:
@unread = @conversations.select{ |c| c.is_unread?(current_user) }
这将遍历所有对话,并返回一个仅包含未读消息的数组。您是说您希望收件箱先有未读的邮件,即使有新邮件已被阅读?获取此错误nomethoder错误:未定义的方法#`
@unread = @conversations.select{ |c| c.is_unread?(current_user) }