2015-08-28 4 views
-1

У меня есть следующие две моделиActiveRecord - Группа по атрибуту включены таблицы

post_comment.rb

class PostComment < ActiveRecord::Base 
    has_many :replies, dependent: :destroy 
    ... 
end 

reply.rb

class Reply < ActiveRecord::Base 
    belongs_to :post_comments 
    belongs_to :reply 
    ... 
end 

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

PostComment.all.includes (: replies)

Я хочу, однако, также группировать ответах со стороны reply_id атрибута модели ответа

В идеале я хотел бы, чтобы в конечном итоге с чем-то вроде следующего прямо из БД:

[ 
    <Post 1: 
    replies: { nil: [...], 1: [...], 2: [...], ... } 
    ... 
    >, 
    <Post 2: 
    replies: { nil: [...], 123: [...], 341: [...], ... } 
    ... 
    >, 
] 

Спасибо!

ответ

0

Я не думаю, что ActiveRecord может сделать

Мы можем группа опирается, как это, но, возможно, это не так, как вы хотите

posts = PostComment.all.includes(:replies) 
for post in posts 
    ... 
replies_map = post.replies.group_by(&:reply_id) 
    ... 
end 

вы можете добавить виртуальный столбец модели

0

Чтобы сгруппировать ответы по атрибуту модели ответа reply_id, вы можете сделать это:

PostComment.joins(:replies).group('replies.reply_id') 
+0

Получение следующего вывода: PG :: UndefinedTable: ERROR: отсутствует запись FROM-clause для таблицы «ответы» – delisdeli

+0

@delisdeli, пожалуйста, попробуйте еще раз обновленный ответ. Теперь он должен работать. –

+0

Я не думаю, что это вернет формат, который я ищу – delisdeli

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