liste tous les enregistrements de la semaine en cours, jour après jour, affiche également le jour si aucun enregistrement - ruby-on-rails, ruby

Pourquoi mon bloc de tâches pour les travaux n'est-il pas interprété? Rails 4.2, Ruby 2.1.7.

# _jobs.html.slim

tbody
- (Date.today.beginning_of_week..Date.today.end_of_week).to_a.each do |day|
h3= day.strftime("%d.%m.%Y")
- Job.due_day(day).each do |job|
<from here its ignored>
tr= job.start_time
tr= job.name
...


# job.rb

def self.due_day(day)
all.select{|x| x.start_time.to_date == day}
end

Production attendue:

25.01.2016
26.01.2016
Job 1
27.01.2016
Job 2
28.01.2016
Job 3
Job 4
29.01.2016
30.01.2016

Sortie actuelle:

25.01.2016
26.01.2016
27.01.2016
28.01.2016
29.01.2016
30.01.2016
Job 1
Job 2
Job 3
Job 4

Réponses:

2 pour la réponse № 1

Un petit ajout à la réponse de @ mixan946:

def self.grouped_by_week_day
today = Date.today
where(start_time: today.beginning_of_week..today.end_of_week)
.group_by { |job| job.start_time.to_date }
end

# make the call outside the loop in order to make the SQL query once.
- jobs_grouped_by_week_day = Jobs.grouped_by_week_day
- (Date.today.beginning_of_week..Date.today.end_of_week).each |day|
h3= day.strftime("%d.%m.%Y")
- next if jobs_grouped_by_week_day[day].blank?
table
- jobs_grouped_by_week_day[day].each do |job|
<from here its ignored>
tr:td= job.start_time
tr:td= job.name

La différence est que itérer sur un hash créé avec group_by, vous n'obtenez pas les clés du hachage dont ils n'ont aucune valeur. Donc, ma suggestion est de parcourir les jours de la semaine qui vous intéressent et d’accéder au hash ce jour-là.


1 pour la réponse № 2

Il y a quelques problèmes dans votre code le corps

# Doing in this way is very slow when you have noticeable amount of records
# it"s responsibility of database to work with data
def self.due_day(day)
all.select{|x| x.start_time.to_date == day}
end

Je suggère la solution suivante:

def self.grouped_by_week_day
today = Date.today
# All type conversions handled by ActiveRecord
where(start_time: today.beginning_of_week..today.end_of_week)
.group_by {|j| j.start_time.to_date }
end

- Job.grouped_by_week_day do |day, jobs|
h3= day.strftime("%d.%m.%Y")
# It"s better to not paste non-table related markup in tables
# so leave h3 in outer of table
table
- jobs.each do |job|
<from here its ignored>
# To show cell use td, not tr
tr:td= job.start_time
tr:td= job.name

Le plus populaire