Bonjour,
je cherche à trier mes projects par le nombre de jours restant (project.end_date - Time.now) mais je ne comprend pas comment faire pour l'intégrer dans mon controller pour récuperer par défaut cet ordre la, quelqun pour me venir en aide ?
Je fais ca : @projects = Project.all.order(days_until_end(project.end_date - Time.now))
mais ca ne réorganise pas la liste.
Merci.
Bah je ne fais pas de requete SQL. Je passe par ca :
def index
@projects = Project.all.order(days_until_end(project.end_date - Time.now))
end
Ok. Et est ce que quelque chose comme cela pourrais fonctionner ? J'ai testé mais je ne comprends pas vraiment. Il y a une erreur " undefined method `Project' " , ok Project n'est pas défini, mais pourquoi ?
before_action :int_day, only: [:index]
def index
@projects = Project.all.sort_by(&:int_day).reverse
end
private
def int_day
time = (self.Project.end_date - Time.now)
days = (time / (3600*24))
end
En réalité je ne sais absolument pas ce que je suis entrain de faire. :)
La clause order
requiert des symboles en argument (Les symboles correspondant aux noms de tes champs)
def index
@projects = Project.all.order(:days_left)
# ou bien
@projects = Project.all.order(days_left: :desc)
end
Apres si tu veux avoir la liste seulement de ceux répondant a un certain critère, rajoute un where
dans ta requête :
def index
@projects = Project.where('days_left <= ?', int_day()).order(days_left: :desc)
end
Merci pour ta réponse, entre temps j'ai trouvé une solution qui parait fonctionner. Je récupére tous mes projets et je fais un classement sur la date de fin du projet. Normalement le nombre de jour restant et lié à la date de fin et la date du jour. Du coup ca doit être dans l'autre au final.
Dans ma view
- @projects.sort{ |a,b| a.end_date <=> b.end_date }.each do |project|