私のレールアプリケーションには100以上のモデルがあり、組織のために、私はそれらをフォルダに分割しています。すべてメインモデルフォルダの下にあります。プロジェクトを簡単にナビゲートし、関連するファイル。モデルをディレクトリに分割するのは悪い考えですか?
これは悪い考えですか?これを行う方法は何ですか?
私のレールアプリケーションには100以上のモデルがあり、組織のために、私はそれらをフォルダに分割しています。すべてメインモデルフォルダの下にあります。プロジェクトを簡単にナビゲートし、関連するファイル。モデルをディレクトリに分割するのは悪い考えですか?
これは悪い考えですか?これを行う方法は何ですか?
いいえ、それは悪い考えではありません。多くの人々がそれを行い、私は大規模なアプリケーションでそれなしでは生きられませんでした。
最初は自分のモデルを移動することです:
はそれを行うための2つの方法があります。しかし、あなたがどこにいるのかわからないので、道のりのモデルをロードするようにRailsに指示する必要があります。このようなものは、このトリックを行うべきです:
# In config/application.rb
module YourApp
class Application < Rails::Application
# Other config options
config.autoload_paths << Dir["#{Rails.root}/app/models/*"]
end
end
最初の方法は簡単ですが、実際には最良の方法ではありません。第二の方法は、彼らがしているグループとモデルを名前空間をを必要とする。これは、代わりにUser
とUserGroup
とUserPermissions
を有するので、あなたがUser
、User::Group
とUser::Permission
を有することを意味します。
これを使用するには、rails generate model User::Group
のようなモデルを生成します。 Railsは自動的にすべてのフォルダを作成します。
class User < ActiveRecord::Base
belongs_to :group # Rails will detect User::Group as it's in the same namespace
end
class User::Group < ActiveRecord::Base
has_many :users
end
あなたが好きなあなたは、名前空間のしかし、多くのレベルを指定することができますので、User::Group::Permission
は次のようになります。追加の利点は、このアプローチで、名前空間内組合のためにフルモデル名を綴るする必要がないということです可能。
app/modelsが既に存在するので、サブディレクトリをロードパスに追加する必要はありません。 'User :: Group'のようなネストされたモデルを参照することにより、Railsはこれらのパスを調べることで自動的にロードします。すべての 'app'定数はプロダクションモードで読み込まれます。 –
@ Ryanはい、モデルのネームスペースを使用している場合は可能です。あなたが*ネームスペースしないが、それらをサブフォルダに入れて、 'configにパスを追加しないでください。 autoload_paths'を実行すると、ロードされません。 – vonconrad
100モデルの場合、実質的に要件です。 100台のモデルは1つのディレクトリに騒々しいです。
スクリプトの出力を見て、生成されたファイルを閲覧レールウェイ(tm)の
rails new MultiDirectoryExample
cd MultiDirectoryExample
rails generate scaffold User::Photo description:string
のアイデアを得るためにこれを試してみてください。
100以上のモデルはありますか?それは大きなプロジェクトですか? –