в моем приложении 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
Account and 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?