Нужна помощь в поиске первой созданной записи каждой группы, в Rails ActiveRecord - PullRequest
1 голос
/ 07 июля 2011

У меня есть таблица с именем FeedItems, и в основном пользователю нужно видеть первый созданный элемент фида для каждого идентификатора сообщения.

В данный момент я использую 'group', и SQLite по какой-то причине предоставляет мне последнее созданное. Я пытался отсортировать список элементов ленты перед группировкой, но это не имеет значения.

user_id   |    post_id    |    action
----------------------------------------
    1             1           'posted'
    3             2           'loved'    <--- this, being created afterwards
                                               should not appear in the query.

Я знаю, что это связано с ВНУТРЕННИМ СОЕДИНЕНИЕМ, и я видел несколько похожих примеров этого, но разница в том, что я не уверен, как это сделать И использовать существующий запрос, который я уже должен найти если пользователи дружат с текущим пользователем.

Вот код для модели:

class FeedItem < ActiveRecord::Base
belongs_to :post
belongs_to :user

default_scope :order => 'created_at desc'
scope :feed_for, lambda { |user| feed_items_for(user).group(:post_id) }

private

def self.feed_items_for(user)
  friend_ids = %(SELECT friend_id FROM friendships WHERE (user_id = :user_id OR friend_id = :user_id))
  ghosted_ids = %(SELECT pending_friend_id FROM friend_requests WHERE user_id = :user_id)
  where("user_id IN (#{friend_ids}) OR user_id IN (#{ghosted_ids}) OR user_id = :user_id", {:user_id => user.id})
end

конец

Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

0 голосов
/ 07 июля 2011

ActiveRecord предоставляет вам динамические искатели на основе атрибутов, что означает, что у вас есть

Feeds.find_last_by_post_id(117)

Если вы предпочитаете иметь кулак, вы имеете:

Feeds.where(:post_id => 117).first

всегда могу сделать, что я не уверен, что это «лучшая практика»:

Feeds.where(:post_id => 117).order('created_on DESC').first

Подробнее об этом можно прочитать по адресу:

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...