为什么我的每个工作块都没有被解释? 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
预期产出:
2016年1月25日
2016年1月26日
工作1
2016年1月27日
工作2
2016年1月28日
工作3
工作4
2016年1月29日
30.01.2016
当前输出:
2016年1月25日
2016年1月26日
2016年1月27日
2016年1月28日
2016年1月29日
2016年1月30日
工作1
工作2
工作3
工作4
答案 0 :(得分:2)
@ 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
不同之处在于迭代使用group_by
创建的哈希,您不会获得它们没有任何值的哈希的键。因此,我的建议是迭代您感兴趣的一周中的日子,并在当天访问哈希值。
答案 1 :(得分:1)
您的代码中存在几个问题 TBODY
# 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
我建议下一个解决方案:
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