Rails:渴望使用外部联接加载关联记录

时间:2015-09-01 00:59:13

标签: ruby-on-rails ruby activerecord

我有一张表格,显示每位客户的所有客户和所有工作。为了加快页面加载速度,我必须急切加载相关的作业,如下所示。

但是,这种方法存在两个问题:

    即使没有Customers方法

  1. joins()没有工作也无法加载

  2. 我必须使用慢速Ruby按jobs.id为每位客户排序作业。

  3. 有解决方案吗?

    # 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
    

1 个答案:

答案 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(', ')