2011-09-12 60 views
1

我有一個Padrino項目,由多個應用程序組成。例如:Ruby Padrino中的多個應用程序:如何命名模型?

  • 網站(型號:網站,頁面
  • 博客(型號:帖子,評論
  • 店(型號:類別,產品,訂單
  • 跟蹤(型號:訪客,內容

將所有未修改的模型放到一個目錄中似乎對我來說就像一團糟。所以我想命名空間他們喜歡的:

  • 網站(型號:網站,SitePage
  • 博客(型號:博文,BlogComment
  • 店(型號:ShopCategory,ShopProduct,ShopOrder
  • 跟蹤(型號:TrackingVisitor,TrackingContent

但是,這看起來很奇怪,併產生了很多額外的打字。

您認爲如何?忽略命名空間並希望不會遇到命名衝突(例如,「Blog應用程序的類別」模型=>錯誤),還是應該將應用程序名稱預先分配給每個模型?

在此先感謝。

乾杯馬克

回答

1

我使用一個模塊的命名空間,即:

module BlogModels 
    class Category 
    end 
end 

,並與DM工作的很好的例子,因爲我已經命名空間table_name,順便說一句自己的方式BlogCategory也沒什麼問題。

+0

嗨,謝謝你的快速回答。我正在使用mongoid。將我的模型放入模塊中進行命名空間聽起來不錯,但這不會影響MongoDB集合的命名,我必須手動指定它們。所以我想將名稱空間應用於模型名稱,而不是將其放入模塊中。難道你不認爲擁有一個名爲「類別」的商店模型和博客模型「BlogCategory」是無足輕重的嗎? – Marc

0

我發現了一個合理的方式來命名空間在Mongoid的模型,並保持小開銷。

我的名字是這樣的模式:博客帖子,BlogComment,BlogCategory

和模型我利用CLASS_NAME和inverse_of的:

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 

這使得接入鏈路短而且更好:

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

BlogComment.first.blog_post # get related post 

更多詳情:http://mongoid.org/docs/relations.html

相關問題