2016-06-23 2 views
2

정수를 반환하는 모델에서 메서드를 정렬하는 방법을 알아 내려고하고 있습니다.ransack 정수를 반환하는 모델 메서드로 정렬

ransack을 사용하여 내 테이블에 questions_count 메서드로 정렬 할 수 있습니다.

나는 행운이없는 <th><%= sort_link @q, :questions_count %></th>을 사용해 보았습니다.

이것도 가능합니까? 그것을 어떻게 성취 할 수 있습니까?

답변

2

sort_link 도우미 메서드는 속성 또는 연관 속성 만 수락 할 수 있지만 간단한 레코드 수를 계산하려면 기존 레일 메커니즘을 사용하면됩니다.

가장 쉬운 방법은 counter_cache을 사용하는 것입니다.이 방법은 연결된 모델에 속한 개체의 수를 계산하는 방법입니다. 이 실제로이의 이름을 사용자 정의 할 수 있습니다, 그것은 또한 그러나, questions_count라는 비즈니스 테이블에서 데이터베이스 컬럼을 필요로

has_many :questions, counter_cache: true 

을 (그리고 :이 같은 비즈니스 모델에 연관이를 추가해야합니다 sort_link 메소드에 많은 수의 질문을 전달할 수있게 해줍니다.)

일단 이것이 설정되면 문제없이 sort_link 도우미 메서드를 호출 할 수 있어야합니다.

sort_link @q, :questions_count 

counter_cache here에 대해 자세히 알아보십시오.

또는이를 달성하기위한 또 다른 방법이 있습니다. 대신 ransacker을 정의 할 수 있습니다. 이 함수를 사용하여 비즈니스에 관련된 모든 질문에 대해 COUNT 함수를 수행 할 수있는 SQL 문을 명시 적으로 작성할 수 있지만 counter_cache 메소드와 같은 편리한 솔루션이라고는 생각하지 않습니다. 주로 SQL 문이 questions_count 메소드 기능을 재정 의하여/대체하기 때문입니다.

ransackers에 대한 자세한 정보 here.

0

예, @collection.sort_by{|item| item.method_name}과 같은 것을 사용하여 정렬 할 수 있습니다. "@collection"을 항목 집합으로 바꾸고 "method_name"을 정렬 할 메서드로 바꿉니다.

+0

이것은 횡설수설을 사용하지 않고 있지만 .... – Deekor

+0

@collection은 샅샅이 검색 한 결과입니다. Model.search (params)와 같은 것 .sort_by {| item | item.method_name} –

+0

하지만 그 때마다 정렬됩니다, 나는 그것이 단지 정렬 링크를 클릭하면 정렬 싶어요. – Deekor