나는 형태로 선택 상자를 채우는 데 내 User
모델에이 기능을 사용하고 있습니다 :데이터베이스 필드가 아닌 가상 속성별로 레코드를 필터링합니까?
def outstanding_invoices
invoices.to_a.select { |invoice| invoice.balance < 0 }
end
문제는 balance
데이터베이스 필드하지만, 뭔가를 계산하는 방법은되지 않는 것입니다.
user
에있는 모든 invoice
에 대해 위의 함수가 반복되므로 선택 상자를 생성하는 데 엄청난 양의 SQL 쿼리가 필요합니다.
하나의 SQL 쿼리 만 사용하는 것이 더 빠른 선택 상자를 생성 할 수 있습니까?
간단한 대안은 각 invoice
의 balance
을 데이터베이스에 저장하는 것이지만 데이터베이스를 최소한으로 유지하기를 원하기 때문에 그 일을하기를 꺼립니다.
도움 주셔서 감사합니다.
확인해 주셔서 감사합니다. 그냥 이것을 구현하려고합니다. 'update_attributes' 메쏘드는 여기서'stack overlflow'를 발생시킵니다. 이것에 대한 대안이 있습니까? – Tintin81
흠,'update_column (: current_balance, balance)'가 최선의 방법이라고 생각했습니다. ... – Tintin81
'update_attributes'는 정상적으로 작동해야합니다 - 어디서나 (예 : 이름 충돌과 같은) 재귀 적 메서드 호출이 없는지 확인하십시오. 'update_attribute'를 시도해 볼 수도 있지만 다른 의미가 있으므로 문서를 확인하십시오. –