2012-04-26 10 views
5

かなり大きなプロジェクトでは、深いモデルの入れ子の問題に遭遇しました。Ruby on Railsの深いモデル入れ子

class Communication::Conversation::ForProposal < Communication::Conversation::Base 
    ... 
end 

さらに、我々はそうでTABLE_NAME、CLASS_NAME、FOREIGN_KEYSとを指定する必要があるたび:たとえば、このようなモデルが存在します。

どのような選択肢があり、どのように実際にあなたの意見モデルに名前を付けるべきですか?

+1

名前空間モデルを使用しないでください。 –

+0

@ビールリントン時にはそれは意味をなさない。たとえば、プロジェクトに複数のモデルが一緒に機能するサブシステムがあるとします。 –

+0

私は友人とのダイアログを持っていたので、STIモデルとコントローラー、管理者とユーザーの部分を分けることがネスティングがクールだと結論づけました。他に何か? – makaroni4

答えて

0

ミックスインを調べる必要があります。それは機能によってコードを整理するのに役立ちます。これにより、コードがより洗練されたものになります。次のページでそれについて説明します。

http://juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/

私はGitHubの上でRailsのためのいくつかのソースコードを見てきた、そしてそれは非常にきれいです。彼らはミックスインを大いに利用している。レールの最近のバージョンで

https://github.com/rails/rails/tree/master/activemodel/lib

+0

mixinsを使用してモデルをグループ化しません。私は他のデータベースへの追加の接続を持っています(これは移行の措置です)。データベースの中には同じテーブル名がありますので、名前空間も名前の衝突を広げます。 –

+0

REXMLユーティリティのドキュメントに、REXMLをインクルードして名前空間を修飾する必要がない例があります。 http://www.germane-software.com/software/rexml/docs/tutorial.html –

0

あなたはアプリ/モデルの下のディレクトリにそれらを置くことによって、あなたのモデルを名前空間ができます。あなたはそれらのモデルのapp/models/communication/conversationを試してみるかもしれません。

+0

これは、モデルを使用するときに名前空間を指定する必要がないという問題に対処していません。 –

+0

あなたの所在地が明確ではなく、名前空間を指定したくありません。それぞれを記述して他のものについて話している場合は、分かりやすくするためにモジュールでラップすることができます。そのため、モジュール内のクラスへの参照は接頭辞を必要としません。モジュールの外部で名前空間を指定する必要性を減らそうとするなら、 'include ModuleName'のようなものが必要ですが、モジュール全体を現在のクラスにロードすると思います。 – LordJavac

関連する問題