У меня есть вопрос, я не знаю, возможно ли это, но предположим, что эти модели
class Event < ApplicationRecord
has_many :gifs
end
class Gif < ApplicationRecord
belongs_to :event
end
пустая база данных, используя rails console
, вы делаете это
gif_1 = Gif.create
gif_2 = Gif.create
gif_3 = Gif.create
event_1 = Event.new
event_1.gifs = [gif_1, gif_3]
event_1.save
event_2 = Event.new
event_2.gifs = [gif_2]
event_2.save
Как бы вы упорядочили события по атрибуту created_at
их последних созданных gif-файлов.
Вот пример того, что я пробовал, но это не дает правильного результата
ordered_events = Event.includes(:gifs).joins(:gifs).order("gifs.created_at DESC")
ordered_events.first.id
=> 2 # I want this to return 1
СейчасЯ понимаю, почему моя попытка, вероятно, не сработала.Я думаю, это потому, что он, вероятно, только посмотрел на первый Gif
, чтобы выполнить упорядочение.
Кроме того, у меня была еще одна мысль, и здесь я понятия не имею, с чего начать пытаться сделать это в запросе., но что, если Event
имеет 0 Gif
, из того, что я написал, кажется, что никакие гифки просто не отсылают эти события за теми, у кого есть гифки, но это не сработает для меня.
вот еще одинконтекст в rails console
, который более реалистичен, так как обычно вам сначала нужно событие для хранения Gif
event_1 = Event.create
event_2 = Event.create
gif_1 = Gif.create(event_id: event_1.id)
gif_2 = Gif.create(event_id: event_2.id)
event_1 = Event.create
gif_3 = Gif.create(event_id: event_1.id)
Теперь здесь то, что я хотел бы получить из своего запроса, было бы чем-то вроде[event_1, event_3, event_2]
, потому что, поскольку у event_3
нет картинок, я хочу использовать его created_at
для заказа.
Я знаю, как я мог бы сделать это вручную с помощью какой-либо вспомогательной функции или другой, но я бы очень хотелчтобы иметь возможность подобного рода вещи в одном запросе напрямую.