2013-10-13 5 views
2

동일한 모델 (제품 카테고리) 내에서 계층 구조를 모델링하는 것은 이번이 처음입니다.레일 : acts_as_tree 및 acts_as_sane_tree

이 주제에 대해 큰 post을 발견했습니다. 필자는 Rails 4 & Postgres를 사용하기 때문에이 기사에서는 재귀 쿼리 (이 용어를 처음 들었습니다)를 지원합니다. "재귀 쿼리가있는 인접 목록"은 모델링이 쉽고 빠른 쿼리.

이 기사에서는 재귀 쿼리를 지원하는 acts_as_sane_tree gem을 제안합니다. 이 repo는 2 년 동안 업데이트되지 않았고 Rails 4를 지원하는지 확실하지 않습니다.이 프로젝트는 레일 4를 지원하고 잘 유지되는 acts_as_tree 보석의 포크입니다.

어떤 보석을 사용해야합니까? 그리고 비싼 쿼리를 피하기 위해 acts_as_tree gem이 재귀 쿼리를 지원합니까?

답변

2

사용하는 보석이 의심 스럽다면 항상 the Ruby Toolbox을 살펴 보시기 바랍니다. 보석 프로젝트가 아직 활성화되어 있는지,이 보석을 사용하는 개발자가 얼마나되는지, 더 많은 것을 평가하는 데 도움이됩니다. 왜 그걸 알았습니까? 더 이상 유지되지 않는 보석을 선택하고 싶지 않습니다. 커뮤니티가 사용하는 도구를 사용하여 주류에 가까이 있어야합니다. 커뮤니티를 따라 가지 않으면 버그가 수정되거나 더 많은 문서가 필요하거나 레일스 버전을 업데이트하고 싶을 때 문제가 발생합니다.

이 경우 for nested ActiveRecord awesome_nested_set 및 anceestry가 좋은 후보입니다. 대부분의 데이터베이스가 이것을 지원하지 않기 때문에 재귀 쿼리 구현을 선택하지 않을 것입니다. 아주 좋은 이유가 없다면 앱을 특정 데이터베이스 관리 시스템에 바인딩 할 필요가 없습니다.

1

가계 보석을 고려해 보셨습니까?

"모든 상위 트리 구조 관계 (조상, 부모, 루트, 하위, 형제, 자손)를 노출하며 모두 단일 SQL 쿼리에서 가져올 수 있습니다."

+0

답장을 보내 주셔서 감사합니다. 내가 읽은 것부터 재귀 쿼리가있는 인접 목록에는 Path Enumeration (Ancestry gem)에 비해 몇 가지 장점이 있습니다 : 1. 참조 무결성, 2. 어린이의 쿼리 용이성, 3. 계층 깊이에 대한 제한 없음, 4. 업데이트 할 쿼리 하나만/삽입/삭제. 출처 : http://gmarik.info/blog/2012/10/14/recursive-data-structures-with-rails/ http://www.slideshare.net/billkarwin/models-for-hierarchical-data/http : //stackoverflow.com/questions/4907698/design-relational-database-use-hierarchical-datamodels-or-avoid-them – migu