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?
答案 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