2011-09-12 7 views
1

私は複数のアプリからなるPadrinoプロジェクトを持っています。たとえば、次のようにRuby Padrinoの複数のアプリ:モデルに名前を付けるには?

  • ウェブサイト(モデル:サイト、ページ
  • ブログ(モデル:ポスト、コメント)
  • ショップ(モデル:カテゴリー、製品、注文
  • トラッキング(モデル:ビジター、コンテンツ

すべてのモデルを変更せずに1つのディレクトリに入れるのは、私にとっては混乱のようです。だから私は好きそれらを名前空間を考える:

  • ウェブサイト(モデル:サイト、SitePage
  • ブログ(モデル:ブログ投稿、BlogComment
  • ショップ(モデル:ShopCategory、ShopProduct、ShopOrder
  • トラッキング(モデル:TrackingVisitor、TrackingContent

これは非常に奇妙に見え、余分なタイピングがたくさんあります。

あなたはどう思いますか?名前空間を無視し、名前の競合に陥らないようにするのは良いスタイルですか(Blogアプリのカテゴリカテゴリ=>エラー)か、各モデルにアプリ名を追加する必要がありますか?

ありがとうございます。

乾杯マルク・

答えて

1

私は、名前空間、すなわち、モジュールを使用します。

module BlogModels 
    class Category 
    end 
end 

と私はtable_nameを名前空間きたので、DMと非常によく例に動作しますが、ところであなたの方法BlogCategoryも私には結構です。

+0

こんにちは、お返事ありがとうございます。私はモンゴイドを使用しています。私のモデルを名前空間のモジュールにするのは素晴らしいことですが、これはMongoDBの名前付けには影響せず、手動で指定する必要があります。だから私は、モジュールに入れるのではなく、モデル名に名前空間を適用することを考えました。 「カテゴリ」というショップモデルと「BlogCategory」というブログモデルを持つのは嫌ですか? – Marc

0

Mongoidでモデルのネームスペースを作成し、オーバーヘッドを小さく保つという合理的な方法が見つかりました。

私はこのようなモデル名:ブログ投稿、BlogComment、BlogCategory

をモデルに、私はCLASS_NAMEとinverse_ofを使用します:

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

BlogComment.first.post # get related post 

:経由

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.blog_comments.first # get comments 

BlogComment.first.blog_post # get related post 

詳細:http://mongoid.org/docs/relations.html

関連する問題