2012-07-16 11 views
5

Quiero mostrar las publicaciones que tienen y las han ordenado por un par de criterios, primero por la cantidad de votos que tienen en ellas y por la fecha en que fueron creadas. No quiero que se muestren las publicaciones que tienen más de una semana de antigüedad, por lo que solo se publicarán en la última semana. He intentado hacer esto:Mostrar solo publicaciones creadas la semana pasada

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

pero me dio un error de comparación de NilClass con 2 fallido

sé que el código funciona mediante mensajes acaba de clasificación por recuento de votos, pero también quiero limitar el tiempo por lo que podía alguien dime cómo se puede hacer esto. Todavía soy nuevo, lo siento por la simplicidad.

+0

Creo que la condición de mostrar mensajes no más antiguos que la semana debería ser si post.created_at> 1.week.ago.utc. y el error nilClass podría deberse a que algo a lo que intenta acceder en su consulta no está presente en el archivo db –

Respuesta

2

El código para buscar publicaciones debe estar en el Modelo y no en las Vistas. Siempre hay una buena idea de que debe buscar los registros que necesitamos mostrar en lugar de buscar los registros y mostrarlos en las vistas. Usted debe hacer algo como siguiente

en su solución 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 
Cuestiones relacionadas