铁路记录推

时间:2013-02-12 03:16:22

标签: ruby-on-rails

Controller.rb

@payments = PaymentDetail.joins(:project)
视图文件中的

@ payments.count等于550

当我像这样改变我的控制器时

@payments = PaymentDetail.joins(:project)
@payment_errors = PaymentError.joins(:project)
@payment_errors.each {|payment_error| @payments << payment_error}

仍然在视图文件中@ payments.count等于550,而必须是(550+@payment_errors.count)

为什么我不能将@payment_error记录推送到@payments?

2 个答案:

答案 0 :(得分:1)

您正试图将PaymentError数据添加到PaymentDetail表中,这是错误的。如果您需要在数组中使用to_a

你可以这样做:

 @payments = PaymentDetail.joins(:project).to_a + PaymentError.joins(:project).to_a

对数组使用will_paginate。在控制器中添加以下行:

 `require 'will_paginate/array'`

答案 1 :(得分:0)

这是因为延迟加载。

PaymentDetail.joins(:project)

这不会立即加载付款。相反,只要您开始访问付款,就会加载付款(例如,在each循环中)。您可以通过将结果转换为数组来强制加载。试试这个:

@payments = PaymentDetail.joins(:project).to_a
@payment_errors = PaymentError.joins(:project).to_a
@payments += @payment_errors

或者,如果您不需要@payment_errors作为单独的var:

@payments = PaymentDetail.joins(:project).to_a + PaymentError.joins(:project).to_a