RoR 튜토리얼은 ORM이 작동하도록 테이블 당 하나의 모델을 가정합니다. My DB 스키마는 개념적으로 5 개의 기능 그룹으로 나뉘어 진 약 70 개의 테이블을 가지고 있습니다. 예를 들어 주어진 테이블은 하나의 기능 그룹에만 있고 다른 그룹의 테이블 간의 관계는 최소화됩니다. 그래서 : 모델을 디자인해야합니까? 개념적 그룹당, 아니면 단순히 70 개의 레일스 모델을 갖고 그룹화를 '개념적'으로 두어야합니까? 감사합니다.Ruby on Rails의 모델 설계를위한 모범 사례
답변
테이블/모델을 이름별로 개념적으로 그룹화 (거의 1 : 1 테이블 모델 관계)하는 것으로 확인하여 큰 앱 중 하나에서이를 설명합니다. 예 :
events
event_types
event_groups
event_attendees
etc...
그런 식으로 TextMate 등을 사용하면 모델 파일이 알파 정렬로 잘 그룹화됩니다. 나는이 응용 프로그램에서 80 모델을 가지고 있으며, 일을 정리 유지하기에 충분히 잘 작동합니다.
대부분 70 개의 모델이 있어야합니다. 모델마다 네 개의 네임 스페이스를 가질 수 있습니다. 각 네 개의 네임 스페이스가 네 개의 네임 스페이스를 가질 수 있습니다. 각 그룹에 공통적 인 기능이있을 가능성이 큽니다. 이 경우 각 그룹에 해당 동작을 포함하는 모듈을 만들고 각 관련 모델에이를 포함시킵니다. 공유 기능이 없더라도 모델링을 통해 개념 그룹에 대한 모델을 신속하게 쿼리 할 수 있습니다.
감사합니다. 갑자기 왜 모듈을 사용하고자하는지 이해합니다. 약간의 독서를하는 것. .. – NickR
모든 ActiveRecord 매직을 활용하려면 테이블 당 하나의 모델을 사용해야합니다.
그러나 모델 디렉토리에서 70 개의 파일을 관리 할 필요가 없도록 모듈과 하위 디렉토리를 사용하여 모델을 네임 스페이스로 그룹화 할 수도 있습니다. 모델 관리자 : 사용자 및 관리자 :: 그룹
app/models/admin/user.rb
app/models/admin/group.rb
및 게시에 대한
app/models/publishing/article.rb
app/models/publishing/comment.rb
:: 제 및 게시 ::
코멘트 :예를 들어, 당신은 할 수 있습니다
등 ...
Thankyou! 하위 디렉토리/네임 스페이스는 좋은 해결책입니다. Nick – NickR
레일 스탠드를 사용할 수있는 경우가 아주 적을 수 있습니다. rd 단일 테이블 상속 모델. 아마도 하나의 특정 기능 그룹에있는 모든 클래스는 동일한 필드 (또는 거의 모두 동일)를 가질 것입니다. 이 경우, DRYness STI 제안을 활용하십시오. 하지만 이해가되지 않는 경우에는 표 당 클래스를 사용하십시오.
테이블 당 클래스 버전에서는 일반 기능을 기본 클래스로 쉽게 가져올 수 없습니다. 대신 모듈로 가져옵니다. 다음과 같은 계층 구조가 유용 할 수 있습니다
app/models/admin/base.rb - module Admin::Base, included by all other Admin::xxx
app/models/admin/user.rb - class Admin::User, includes Admin::Base
app/models/admin/group.rb - class Admin::Group, includes Admin::Base
칠십 테이블과 개념의 관계가 좋은 대답을 줄 정말 수 없습니다의 성격에 대한 자세한 내용을 모른 채. 이러한 레거시 테이블 또는 처음부터 이것을 설계 했습니까?
테이블이 어떤 종류의 상속 패턴으로 관련되어 있거나있을 수 있습니까? Rails는 제한된 형태의 상속을 수행 할 수 있습니다. 단일 테이블 상속 (STI)을 찾으십시오.
필자는 70 개의 테이블로 작업하는 것을 피하는 데 많은 노력을 기울였습니다. 작업이 굉장히 많기 때문입니다. 모델 번호 & 컨트롤러와 4 개 이상의 뷰, 헬퍼, 레이아웃 및 메모리는 말할 것도없이 테스트합니다. ind에서 디자인을 지키는로드 이슈. 당연히 내가 시간당 지불하고 반복을 보상 할만큼 충분히 돈을 받고 있지 않는 한.
이미 언급했듯이 데이터베이스 스키마 등을 알지 못해도 괜찮은 조언을하기는 어렵지만 필자는 각 테이블마다 하나씩 70 개 이상의 모델을 만드는 경향이 있습니다.)
일부 모델을 버리면 빠져 나올 수는 있지만 비용은 무시할 수 있습니다.
각 모델 (srboisvert의 answerd)에 대한 컨트롤러 +보기를 만들 필요가 없습니다. 당신은 각 자원 (내가 70보다 훨씬 적을 것으로 예상 할 것입니다 - 아마도 당신의 설명에 의해 판단 할 때 단지 10 또는 15 정도)에 대한 컨트롤러 만 필요합니다.
이 당신의 각 테이블에가 "개체"예를 들어, "자동차"테이블 간주됩니다 또는 일부 테이블 들고 있습니다
메이킹 (70 개) 모델에서 점프하기 전에, 당신이 결정하는 데 도움이 질문을 고려하시기 바랍니다 오직 관계 정보, 예를 들어 모든 외래 키 컬럼?
레일에서는 "개체"테이블 만 모델이됩니다! (특정 유형의 연결에 대해 예외가 있음) 따라서 5 개의 기능 그룹 만 있으면 70 개의 모델이 없을 수 있습니다. 또한 언급 한 기능 그룹이 크게 다를 경우 자체 앱에 가장 적합 할 수도 있습니다.
- 1. Ruby on Rails의 다형성 모델?
- 2. Ruby on Rails의 인증 모델
- 3. Ruby on Rails의 컨트롤러간에 코드를 재사용하는 모범 사례
- 4. Ruby on Rails로 자동 테스트 - 모범 사례
- 5. Ruby on Rails의 'WebControls'
- 6. Ruby on Rails의 NoMethodError
- 7. Ruby on Rails의 양식
- 8. Ruby on Rails의 양식
- 9. Ruby on Rails의 SUBSTRING_INDEX?
- 10. Ruby on Rails의 MySQL 성능
- 11. Ruby on Rails의 백엔드 관리
- 12. Ruby on Rails의 디자인 질문
- 13. 레일 모델 컨트롤러 모범 사례
- 14. Ruby On Rails의 영구 세션
- 15. Ruby on Rails의 마지막 20 %
- 16. Ruby on Rails의 time_select 플러그인?
- 17. Ruby on Rails의 URL 도우미
- 18. Ruby on Rails의 알림 바
- 19. ruby on rails의 sql 쿼리
- 20. ruby on rails의 파일 스트리밍
- 21. Ruby on Rails의 스티키 폼
- 22. Ruby on Rails의 설치 문제
- 23. ruby on rails의 컨텐츠를 편집하십시오.
- 24. Ruby on Rails의 OpenID 인증
- 25. Ruby on Rails의 form_remote_tag가없는 템플릿
- 26. Ruby on Rails의 작동 방식
- 27. Ruby on Rails의 다형성과 형태
- 28. Ruby on Rails의 'to_sym'메소드는 무엇을합니까?
- 29. Ruby on Rails의 최근 활동
- 30. Ruby on Rails의 메소드 호출하기
물론 문제가 깔끔하게 해결됩니다. 감사합니다! – NickR