2012-07-17 3 views
1

연관이 존재하는 경우 연관 필드별로 정렬하고 그렇지 않으면 객체 자체의 속성에 따라 정렬하는 ActiveRecord 쿼리를 작성할 수 있습니까?ActiveRecord를 사용하여 연관 필드별로 정렬

예 :은 내가 Discussion 객체 has_many :comments 있습니다. discussion.latest_comment.created_at으로 정렬 된 토론 목록을 표시하고 싶습니다. 그러나 일부 토론에는 의견이 없을 수도 있습니다. 이러한 경우에는 대신 discussion.created_at 속성을 사용하고 싶습니다.

catch는 결과가 ActiveRecord::Relation (성능상의 이유로, 또한 우리가 Kaminari [관계 객체 필요)를 사용하고 있기 때문에]가 필요하다는 것을 보여줍니다.

내가 생각할 수있는 유일한 점은 과 같은 새 필드를 실제로 생성하는 것이며 처음에는 discussion.created_at으로 채워지고 새 코멘트가 게시 될 때마다 업데이트됩니다. 그러나 이는 유지 관리 측면에서 볼 때 매우 간단하지 않습니다 (예 : 댓글이 삭제되면 어떻게됩니까?).

+0

연결에 조인 호출을 한 다음 조인 된 열의 순서를 먼저 호출 한 다음 두 번째로 로컬 열을 순서대로 정렬 했습니까? – cpuguy83

답변

1

SQL을 통해이 작업을 수행하는 방법을 모르므로 나는 속이고 코드 set a last_post_at attribute whenever a topic is created을 가지고 있습니다.

그런 식으로 한 번에 두 테이블을 쿼리하지 않고도 last_post_at으로 주제를 정렬 할 수 있습니다.

나는 다른 포럼 시스템도 이와 같은 방식으로 사용하는 것을 보았으며 귀하가 설계 한 것이 정확히 포럼과 같은 시스템 인 것처럼 보입니다.

관련 문제