2

セットアップは次のとおりです。

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/ ディレクトリに配置したいと考えています。

4

0 に答える 0