2012-07-16 11 views
5

Chcę móc wyświetlać posty i sortować je według kilku kryteriów, najpierw pod względem liczby głosów, które mają na nich, a następnie według daty, w której zostały utworzone. Nie chcę, aby były wyświetlane posty, które mają więcej niż tydzień, czyli tylko posty z zeszłego tygodnia. Próbowałem w ten sposób:pokaż tylko posty utworzone w zeszłym tygodniu

<%= render @posts.sort_by { |post| post.votes.count if post.created_at < 1.week.ago.utc }.reverse %> 

ale dał mi błąd porównywania NilClass z 2 zawiodły

wiem, że kod działa tylko przez sortujących postach liczenia głosów, ale także chcą ograniczyć czas więc może ktoś mi powie, jak można to zrobić. Wciąż jestem nowy, przepraszam za prostotę.

+0

Myślę, że stan wyświetlania postów nie starszych niż tydzień powinien być, jeśli post.created_at> 1.week.ago.utc. a błąd nilClass może być, ponieważ niektóre rzeczy, do których próbujesz uzyskać dostęp w zapytaniu, nie ma w bazie danych –

Odpowiedz

2

Kod do wyszukiwania postów powinien znajdować się w modelu, a nie w widokach. Zawsze jest dobry pomysł, aby pobrać rekordy, które musimy wyświetlić, zamiast pobierać rekordy i pokazywać niektóre z nich na widokach. Trzeba coś zrobić jak po

w post.rb

def self.recent_posts 
    Post.select("p.*, COUNT(v.id) AS count").where("post.created_at >= 1.week.ago.utc").joins("p LEFT JOIN votes v on p.id=v.post_id").order("count, created_at DESC") 
end 
Powiązane problemy