セットアップは次のとおりです。
class Project < ActiveRecord::Base
has_many :project_subject_areas, class_name: "Project::SubjectArea"
has_many :subject_areas, through: :project_subject_areas
end
class SubjectArea < ActiveRecord::Base
has_many :project_subject_areas, class_name: "Project::SubjectArea"
has_many :projects, through: :project_subject_areas
end
class Project::SubjectArea < ActiveRecord::Base
belongs_to :project
belongs_to :subject_area, class_name: '::SubjectArea'
end
これを Rails で実行します。
[ SubjectArea.to_s, Project::SubjectArea.to_s ].inspect
与えます:
["SubjectArea", "SubjectArea"]
これを実行しています(サーバーの再起動後):
[ Project::SubjectArea.to_s, SubjectArea.to_s ].inspect
与えます:
["Project::SubjectArea", "SubjectArea"]
ファイル構造は次のとおりです。
models/project.rb
models/subject_area.rb
models/project/subject_area.rb
手動でこれをバイパスできますrequire project/subject_area
が、この名前空間に何か問題がありますか?
モデルに名前を付ける他の方法はありますか?
Rails が名前空間rails generate Project::X
を生成すると、Project がモジュールとして取得されますが、ActiveRecord クラスである必要があります。Project に属する他のモデルもいくつかありますが、それらを名前空間化し、models/project/ ディレクトリに配置したいと考えています。