2014-04-23 3 views
2

Rails 4 응용 프로그램에서 paper_trail gem을 사용하고 있으며 기본 정렬 순서를 설정하고 싶습니다. papertrail에는 모델이없고 컨트롤러와 이니셜 라이저 만 있습니다.papertrail의 기본 정렬 버전

어디에 넣을 수 있습니까? 그것을위한 모델을 만들어야합니까?

default_scope order('created_at DESC') 

답변

6

글쎄, 나는 각 do 블록에서 리버스를 사용할 수 있다는 것을 알았다. 나는 그보다 더 복잡 아무것도 필요하지 않기 때문에

versions.reverse.each

는 나는 지금 할 것 같아요.

+0

버전 수가 적은 경우에도 여전히 작동하지만 더 많은 양을 사용하면 성능이 크게 떨어집니다. – maxigs

+0

필자는 또한 최신 10 가지 버전 만 얻으려고 limit를 사용하고 있는데, paper_trail이 기본적으로 created_at ASC별로 정렬하는 것처럼 보이기 때문에이 방법은 작동하지 않습니다. – mscriven

+0

페이지 매김에서는 작동하지 않습니다. 데이브 T '대답 않습니다. 'versions.reorder (created_at :: desc)' – Julien

4

올바른 방법은 unscope를 통해 이전의 정렬을 제거하는 다음 원하는 그러나 그것을 설정합니다 :

somethings.version.merge(PaperTrail::Version.unscope(:order)).order('created_at DESC') 

이 당신에게 적절한 쿼리를 줄 것이다 : 예를 들어

http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-unscope

올바른 정렬과 함께

+0

흥미 롭습니다. 나는 unscope에 대해 몰랐다. 나는 이것을 밖으로 시험 할 것이다. 감사. – Ossie

+0

이것은 나를 위해 일했습니다! – mscriven

0

version.rb in paper_trail gem. 내 컴퓨터의 디렉토리를 엽니 다. 추가 : 체인에 앞서 순서를 제거하는 데 필요한

scope :by_date_desc, lambda { unscope(:order).order('created_at DESC') } 

unscope을 (당신에게 maxigs 감사합니다). 물론 좋아하는 스코프 이름을 사용하십시오. 나를 위해 일했다.

C : \ Ruby200 \ lib 디렉토리 \ 루비 \ 보석 2.0.0 \ 보석 \ paper_trail-4.0.0.beta2 \ \는 \ paper_trail \ 프레임 워크 \ active_record \ 모델 \ paper_trail \는