레일에서 Arel을 사용하여 - 을 효과적으로 생성하는 방법을 찾고 있는데, 여전히 SELECT * FROM table
으로 처리 할 수 있습니다.Rails/Arel : 모든 레코드를 ActiveRecord :: Relation으로 선택
예를 들어, 여러 개의 범주로 헤어 졌 잖아 모델을 가지고 있고, 나는 다음과 같은 방식으로 이들에 대한 카운트를 돌려 : 이것은 잘 작동하고 COUNT
쿼리를 발사있는 장점이있다
relation = Model.where(:archived => false) # all non-archived records
record_counts = {
:total => relation.count,
:for_sale => relation.where(:for_sale => true).count
:on_auction => relation.where(:on_auction => true).count
}
실제로 레코드 자체를 선택하기보다는 MySQL을 사용합니다.
그러나 이제는 보관 된 레코드를 카운트에 포함해야하지만 relation = Model.all
의 결과는 Array
이며, 나는 ActiveRecord::Relation
을 찾고 있습니다.
내가 이것을 할 수있는 유일한 방법은 model.where(model.arel_table[:id].not_eq(nil))
인데, 다소 효과가 있지만 다소 불합리한 것 같습니다.
누구든지이 문제에 관해 밝힐 수 있습니까?
Rails 4.0.13에서'Model.all'은 릴레이션을 반환하고'Model.scoped'는 더 이상 사용되지 않습니다. – Tsutomu