1. ホーム
  2. ruby-on-rails

[解決済み] Rails 4: モデルを名前空間なしでサブパスに整理する?

2023-08-07 08:14:32

質問

このようなものは可能でしょうか?

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

を整理することが目的です。 /app/models フォルダをよりよく整理することですが、モデルを名前空間化する必要はありません。

Rails 3に関する未解決の質問はこちらです。 Rails 3.2.9とサブフォルダ内のモデルについて .

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

どのように解決するのですか?

デフォルトでは、Railsはmodelsディレクトリのサブフォルダをオートロードのパスに追加しません。そのため、名前空間付きのモデルしか見つけることができません。名前空間は、探すべきサブディレクトリを照らし出します。

のすべてのサブフォルダを追加するために 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+のためのUPDATE

Rails 4.1では、アプリジェネレータに config.autoload_paths をデフォルトで含みません。そのため、上記は本当に config/application.rb .

アップデイト

上記コード内のオートロード・パスの例を修正して {*/} の代わりに {**} . 必ず muichkineさんのコメント をご覧ください。