我有一张表格,显示每位客户的所有客户和所有工作。为了加快页面加载速度,我必须急切加载相关的作业,如下所示。
但是,这种方法存在两个问题:
Customers
方法 , joins()
没有工作也无法加载
我必须使用慢速Ruby按jobs.id
为每位客户排序作业。
有解决方案吗?
# http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-eager-loaded-associations
@customers = Customer.all.includes(:jobs).where(jobs: {booking_status: [2,3]}).order('users.id ASC').references(:jobs)
@customers.each do |customer|
puts customer.full_name
jobs = customer.jobs.sort_by {|job| job.id}
jobs.each do |job|
puts job.id
答案 0 :(得分:1)
将has_many添加到客户
has_many :special_jobs, -> { where(booking_status: [2,3]).order(:id) }, :class_name => 'Job'
然后做
@customers = Customer.includes(:special_jobs).order(:id)
然后在视图中引用customer.special_jobs
# this is haml
- @customers.each do |customer|
%tr
%td= customer.name
%td= customer.special_jobs.map { |job| link_to(job.name, job) }.join(', ')