2016-12-14 2 views
-2

У меня есть две таблицы: одна для сообщений и один по темам:как получить х последних записей из двух таблиц одновременно

posts: id, topic_id, content, created_at, updated_at 
topics: id, title, content, created_at, updated_at 

Я хочу, чтобы получить х последних записей из обоих из них основаны на updated_at колонка. Поэтому, в конце концов, я ожидаю, что их в ОДНОЙ коллекции будут включать объекты типа BOTH Post и Topic. Надеюсь, я поняла.

+0

Существуют ли таблицы, связанные с topic_id по сообщениям и идентификаторам по темам? –

+0

Да, в теме много сообщений. post.topic_id references topic.id – Kammil

ответ

-1

, поскольку у вас уже есть ассоциации, почему бы не просто:

<% Topic.order(:created_at => :asc).limit(10) do |topic| %> 
    <%= topic.title %> 
    <%= topic.content %> 
    <%= topic.post.content %> 
    <%= topic.created_at %> 
    <%= topic.post.created_at %> 
<% end %> 
+0

Вы должны решить, нужно ли заказывать, когда была создана тема или когда была создана почта; вы не можете заказать оба значения –

0

Похоже, я не сделал себе достаточно ясно, в конце концов. Но тем временем я придумал решение. Это не идеально, но это работает.

def recent_activities(count: 10) 
    posts = Post.order(updated_at: :desc).limit(count) 
    topics = Topic.order(updated_at: :desc).limit(count) 
    activities = posts + topics 
    activities.sort! { |x, y| y.updated_at <=> x.updated_at } 
    activities.first(count) 
    end 

Таким образом, как вы можете видеть, ассоциация post.topic_id и topic.id не имеет отношения к делу. Есть две таблицы, которые просто происходят с обоими столбцами updated_at. Мне нужны последние X-записи из группы, состоящие из сообщений и тем - в отрыве над вызываемыми действиями.

Смежные вопросы