У меня есть область в рельсах, которая должна упорядочить набор разговоров по последнему атрибуту сообщения чата созданного_сети.
Вот так:
class Conversation < ApplicationRecord
has_many :chat_messages, -> { order(created_at: :asc) }, dependent: :nullify do
def last_from_user
from_user.order("created_at ASC").last
end
def last_delivered_from_user
from_user.order("delivered_at ASC").last
end
def last_from_agent
from_agent.order("created_at ASC").last
end
end
default_scope { joins(:chat_messages).order("chat_messages.created_at desc").distinct }
end
Когда, например, организация с идентификатором 4 получает новое сообщение, я ожидаю, что порядок будет:
[4,1,2,3]
Тем не менее, я получаю:
[1,2,3,4]
если я удалю отдельный метод, подобный этому:
class Conversation < ApplicationRecord
default_scope { joins(:chat_messages).order("chat_messages.created_at desc") }
end
Разговоры упорядочены в порядке, но дублируются:
[4,1,2,3,4]
моя модель chat_message выглядит так:
class ChatMessage < ApplicationRecord
# Associations
# ------------------------------------------------------------
belongs_to :conversation
end
Я не могу использовать «уникальный» метод, потому что это сделает невозможным правильную работу нумерации страниц.
Однако, когда разговор имеет более одного сообщения, «отдельный» метод портится с порядком. эта область возвращает разговоры в том порядке, в котором они были созданы, а не в порядке, который мне действительно нужен.