我有一个控制器,我想用来生成报告,我的第一个报告工作得很好,它只是我的CSEmployee表的排序输出。然而,我的第二份报告并未给出我的期望。每个CS_Employee可以在与之关联的TimeEntry表中具有多个time_entries。我已经为表编制了索引并创建了一个has_many \ belongs_to关系,所有这些似乎在我的其他视图中都能正常工作。我的第二个报告需要显示给定时间段内每个CS_Employee的所有相关time_entries。以下是我到目前为止的情况:
def cs_employees
@cs_employees = CsEmployee.all
@cs_employee = @cs_employees.order(:cs_name)
respond_to do |format|
format.html
format.csv { send_data @cs_employee.to_csv }
format.xlsx #{ send_data @cs_employee.to_csv(col_sep: "\t") }
end
def schedules
@start_date = params[:start_date] || 2.weeks.ago
@end_date = params[:end_date] || Date.today
@cs_employee = CSEmployee.all
@cs_employees.each do |cs_employee|
@cs_employee = cs_employee.find(params[:cs_employee_id])
@time_entries = @cs_employee.time_entries.find(params[:id])
@time_entries.each do |time_entry|
tschedules = time_entry.where(:date => (params[:start_date]).to_date..(params[:end_date]).to_date)
@schedules += tschedules if tschedules
end
end
end
当我尝试调试@schedules时,变量中没有任何内容。任何帮助将不胜感激。
答案 0 :(得分:0)
当您拨打@cs_employees
时,您似乎没有填充@cs_employees.each
变量
此外,您的控制器中存在太多业务逻辑。将其移至模型或关注点。
答案 1 :(得分:0)
def schedules
@start_date = params[:start_date] || 2.weeks.ago
@end_date = params[:end_date] || Date.today
@cs_employees = CsEmployee.all
@cs_employees.each do |cs_employee|
....
end
end
答案 2 :(得分:0)
所以,在得到对这个问题的回答并尝试了一些建议之后,事实证明我的循环是一团糟。我最终将逻辑移到了模型中,正如我所指出的那样,它属于模型。生成的代码更简单。这就是现在的样子。
这就是我在模型中所拥有的,连接允许我访问我所有报告所需的所有字段,而不仅仅是日程安排报告。
def self.report(start_date, end_date)
Costcenter.joins(:time_entries)
CsEmployee.joins(:time_entries)
Maintenancecode.joins(:time_entries)
Unit.joins(:time_entries)
Workcode.joins(:time_entries)
TimeEntry.where( :date => start_date..end_date )
end
以下是我现在在控制器中的代码:
def schedules
@start_date = params[:start_date] || 2.weeks.ago.to_date
@end_date = params[:end_date] || Date.today
@schedule_report = TimeEntry.report(@start_date, @end_date)
end
感谢所有帮助,并让我排除了我的代码所在的位置。