2016-03-03 3 views
0
class Post 
    has_many :commments 
end 

class Comment 
    belongs_to :post 
end 

Я хочу, чтобы отобразить список posts упорядоченный по дате создания (postsubmitted_at). Я также хочу, чтобы какой-то post xyz появлялся наверху, если у него есть комментарий, но он еще не рассмотрен модератором. Мы определим это с помощью атрибута boolean/поля на уровне комментариев (замедлителем = 1/0)Rails: Заказать ActiveRecord объект по атрибуту под has_many отношения

Я попытался

Posts.join(:comments) 
    .distinct 
    .order("submitted_at DESC, comments.moderated") 

, но это исключает сообщения, которые не имеют comments и результаты не упорядоченные, как и ожидалось. Я уверен, что мы можем сделать это на уровне рубинов, но ищем способ сделать это с помощью AR.

+0

Как насчет использования «include» вместо «join» – chaitanya

+0

может быть, это может помочь http://stackoverflow.com/questions/3245201/left-outer-joins-in-rails-3 – chaitanya

ответ

0

Для объединения, используйте:

Posts.join("LEFT JOIN comments ON comments.post_id = posts.id") 

Что будет включать в себя те, без каких-либо комментариев.

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

.order("submitted_at DESC, COUNT(comments.moderated)") 

Хотя, возможно, придется использовать group в некотором роде тоже.

+0

Мне не нужен сосчитать. Я просто хочу, чтобы сообщения с комментариями все же были модерированы наверху. Может ли помочь мне помочь здесь? –

+0

Ах. Управляется булевым полем? –

+0

да .. но в db его хранится как 0/1 в соответствии с правилами rails. –

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