У меня есть таблица с именем 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
конец
Любая помощь будет принята с благодарностью, спасибо.