web-dev-qa-db-ja.com

Rails 4:整理Rails名前空間モデルのないサブパスのモデル?

このようなものを持つことは可能でしょうか?

app/models/
app/models/users/user.rb
app/models/users/education.rb

目標は、/ app/modelsフォルダーをより適切に整理することですが、モデルの名前空間は必要ありません。

Rails 3に対する未回答の質問はこちらです。 Rails 3.2.9およびサブフォルダ内のモデル

名前空間でtable_nameを指定することはうまくいくようです( Rails 4モデルのサブフォルダ を参照)が、名前空間なしでこれを行いたい.

73
Rubytastic

デフォルトでは、Railsはモデルディレクトリのサブフォルダをオートロードパスに追加しません。これが名前空間付きモデルのみを見つけることができる理由です。名前空間はサブディレクトリを照らして調べます。

app/modelsのすべてのサブフォルダーを自動ロードパスに追加するには、次をconfig/application.rb

config.autoload_paths += Dir[Rails.root.join("app", "models", "{*/}")]

または、より複雑なapp/modelsディレクトリがある場合、app/modelsのすべてのサブフォルダーをまとめる上記の方法は適切に動作しない可能性があります。その場合、もう少し明示的にして、指定したサブフォルダーのみを追加することで、これを回避できます。

config.autoload_paths += Rails.root.join("app", "models", "<my_subfolder_name1>")
config.autoload_paths += Rails.root.join("app", "models", "<my_subfolder_name2>")

Rails 4.1+の更新

Rails 4.1では、アプリジェネレータにはデフォルトでconfig.autoload_pathsが含まれていません。したがって、上記はconfig/application.rb

更新

{*/}の代わりに{**}を使用するように上記のコードの自動ロードパスの例を修正しました。この詳細については、必ず muichkineのコメント をお読みください。

106
pdobb