[英]Ruby Rails Loop in Controller
我有一个控制器,我想用它来生成报告,我的第一个报告运行良好,它只是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时,变量中没有任何内容。 任何帮助,将不胜感激。
调用@cs_employees.each
时,似乎并没有填充@cs_employees
变量。
另外,控制器中的业务逻辑太多。 将其移至您的模型或关注点。
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
因此,在获得对这个问题的回答并尝试了一些建议之后,事实证明我的循环很混乱。 我最终将逻辑转移到了模型,正如我所指出的那样,模型属于该模型。 生成的代码更简单。 这是现在的样子。
这就是我在模型中所拥有的,联接使我能够访问所有报表所需的所有字段,而不仅是计划报表。
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
感谢您提供的所有帮助,并让我了解我的代码最初的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.