2013-04-22 2 views
0

У меня есть модель Story и модель Post. В каждой истории есть много сообщений, и каждый пост принадлежит истории.Eager Loading First Association

Когда я загружаю конкретную историю в память из БД, я хочу с нетерпением загружать последнее сообщение этой истории. Вот как я это сейчас:

@story = Story.includes(:posts).find(params[:story_id]) 
@latest_post = @story.posts.first #Note, story.posts :order => "created_at DESC" 

Это работает, но это, кажется, не очень эффективно для загрузки всех сообщений сюжета в память, когда мне нужно только самый последний пост. Есть ли способ ограничить includes, чтобы просто загружать первый пост? Должен ли я даже беспокоиться об этом?

ответ

1

Использование SQL order by, join и limit. ActiveRecord запрос будет выглядеть следующим образом:

@latest_post = @story.include(:posts).order("created_at DESC").limit(1) 

Это позволит создать объединение с должности, порядка на новых постах и ​​просто принести одну.

+0

не думаю эта работа. 'NoMethodError: undefined method' includes' для' # '. Разве вы не пытаетесь применить 'include' и т. Д. К экземпляру Story? –

+0

Ops, typo, это 'include'. – MurifoX