2013-09-27 7 views
0

나는 항상 post.rb, post_comment.rb, post_rating.rb 등등과 같은 폴더 네임 스페이스에서 40 개의 다른 모델로 붙어있는 것처럼 보인다. 레일즈에서 모듈과 같은 것을 만들 수있는 방법이 있는가? 별도의 디렉토리? (이 디렉토리에는 다른 컨트롤러와 뷰도 포함될 수 있습니다).큰 프로젝트를위한 더 나은 레일 파일 구조?

레일즈 엔진이 유망 해 보이지만 제가 놓친 뭔가가있을 수 있습니다.

프로젝트를 더 쉽게 만들고 새로운 공동 작업자로 들어갈 수 있다고 생각합니다.

의견이 있으시면 알려주세요.

답변

2

나는 네임 스페이스를 사용합니다.

rails g scaffold blog/post 명령을 실행하면 블로그 네임 스페이스 아래에 게시가 생성됩니다.

응용 프로그램/모델/blog.rb

module Blog 
    def self.table_name_prefix 
    'blog_' 
    end 
end 

응용 프로그램/모델/블로그/post.rb

class Blog::Post < ActiveRecord::Base 
    has_and_belongs_to_many :categories 
end 

응용 프로그램/모델/블로그/category.rb

class Blog::Category < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
end 
0

예를 들어 post_*.rb 모델을 모두 posts 폴더에 넣을 수 있습니다. Posts::Post*으로 폴더의 각 모델 이름을 바꿔야합니다. class Posts::PostRating < ActiveRecord::Base

코드베이스에서 모든 모델의 클래스 참조를 업데이트하는 것이 아니라 모델 디렉토리에 모든 모델을두고 모델을 다룰 수 있습니다. 부풀린 모델 디렉토리가있는 고통.

관련 독서는 :

1

모델링에 문제가있는 것 같습니다.

의견은 설명입니다. 게시물은 댓글을 가질 수 있으며, 사진은 댓글을 가질 수 있습니다. 그러나 post_comment, photo_comment와 같은 모델을 사용하는 것은 좋은 습관이 아닙니다. 글쎄, 나는 단지 "post_comment"를 본다. 그러나 나는 그런 이유로 그런 이름을 붙인다고 생각한다.

비슷한 기능을 갖춘 이들 모델과 컨트롤러에 대한 작업을 수행하는 것이 바쁠 것입니다. "post_rating"과 동일합니다.

40 개 이상의 모델이 너무 많다고 말하지 않습니다. 그러나 새로운 Basecamp가 50 개 이상의 모델을 가지고 있고 Dispora는 하위 폴더가없는 30 개 이상의 모델을 가지고 있기 때문에 일부를 자르기 위해 앱의 아키텍처를 검토해 볼 가치가 있습니다.

"사진"과 같은 "의견"을 사용하려는 경우 이름을 직접 사용하고 연관성, 다형성, 모듈을 계획하여 코드를 마칩니다.

관련 문제