2011-09-12 2 views
1

저는 여러 앱으로 구성된 Padrino 프로젝트를 보유하고 있습니다.Ruby Padrino의 여러 앱 : 모델 이름을 지정하는 방법?

  • 웹 사이트 (모델 : 사이트, 페이지)
  • 블로그 예를 들어
  • :
  • 숍 (카테고리, 제품, 주문모델) (모델 포스트, 코멘트) 추적 (모델 : 방문자, 콘텐츠)

모든 모델을 수정하지 않고 하나의 디렉토리에 넣으면 혼란 스럽습니다.

  • 웹 사이트 (모델 : 사이트, SitePage)
  • 블로그 (모델 : 블로그 게시물, BlogComment)
  • 숍 (모델 : ShopCategory, ShopProduct, ShopOrder을 그래서 내가 좋아하는 그들을의 네임 생각)
  • 추적 (모델 : TrackingVisitor, TrackingContent)
,617,

그러나 이것은 매우 이상하게 보이고 여분의 타이핑을 많이 만듭니다.

당신은 어떻게 생각하십니까? 네임 스페이스를 무시하고 이름 충돌이 발생하지 않도록 (예 : Blog app => Error의 "Category"모델) 또는 각 모델에 앱 이름을 추가해야합니까?

미리 감사드립니다.

건배 마크는

답변

1

나는 공간 즉, 같은 모듈을 사용

module BlogModels 
    class Category 
    end 
end 

을 내가 BTW 당신의 방법 BlogCategory, table_name을 네임 스페이스 나에게도 괜찮했기 때문에 DM과 아주 잘 예를 작동합니다.

+0

안녕하세요, 빠른 답변 감사드립니다. 나는 몽고이드를 사용하고 있습니다.내 모델을 네임 스페이스를위한 모듈에 넣는 것은 좋지만, MongoDB 컬렉션 네이밍에는 영향을 미치지 않으므로 수동으로 지정해야합니다. 그래서 Namespace를 모듈에 넣는 대신 모델 이름에 적용하는 방법을 생각했습니다. "Category"라는 상점 모델과 "BlogCategory"블로그 모델을 갖는 것이 맞지 않다고 생각하지 않습니까? – Marc

0

Mongoid에서 모델의 네임 스페이스를 지정하고 오버 헤드를 작게 유지하는 합리적인 방법을 발견했습니다.

이 같은 모델 이름 : 통해

class BlogPost 

    include Mongoid::Document 

    # ... lots of stuff ommitted 

    has_many :comments, class_name: 'BlogComment', inverse_of: :post 
end 

class BlogComment 

    include Mongoid::Document 

    # ... lots of stuff ommitted 

    belongs_to :post, class_name: 'BlogPost', inverse_of: :comments 
end 

및 액세스 :

post = BlogPost.first 
post.comments.first # get comments 

BlogComment.first.post # get related post 

블로그 게시물은 BlogComment,

그리고 모델의 BlogCategory

나는 class_name을하고 inverse_of를 사용합니다 이렇게하면 액세스 체인이 짧아지고 더 나은 것입니다.

post = BlogPost.first 
post.blog_comments.first # get comments 

BlogComment.first.blog_post # get related post 

자세한 내용 : http://mongoid.org/docs/relations.html

관련 문제