私のRailsアプリには、このようなモデルがあります
class Account < ActiveRecord::Base
class Account::Bonus < Account
class Account::Virtual < Account
...more
そしてこのように
class DiscountSystem < ActiveRecord::Base
class DiscountSystem::MyFirst < DiscountSystem
class DiscountSystem::MySecond < DiscountSystem
アカウントとDiscountSystem-STIモデル
その後、DiscountSystemにアカウントがあり、DiscountSystemのみのアカウントがあり、新しいモデルにAccount::DiscountSystemという名前を付けてください。
私が正しく理解していれば、「アカウント」の「DiscountSystem」は名前空間「アカウント」にあります。
彼ら:
class Account::DiscountSystem < Account
belongs_to :discount_system,class_name: '::DiscountSystem',:foreign_key => :owner_id
end
と
class DiscountSystem < ActiveRecord::Base
has_one :account, :class_name => 'Account::DiscountSystem',:foreign_key => :owner_id
end
コンソールで試してみると
>> DiscountSystem::MyFirst.all
LoadError: Expected C:/.../app/models/account/discount_system.rb to define DiscountSystem
>> DiscountSystem.all
NoMethodError: undefined method `all' for DiscountSystem:Module
なぜ?私はおそらく名前空間の非常に誤解されている概念です。
もちろん、Account::DiscountSystemの名前をAccount::ForDiscountSystemに変更すると、すべてが正常に機能します。名前空間アカウントで名前を「書き換える」ルート名DiscountSystemにするのはなぜですか?