在我的Rails應用程序我有模特這樣軌STI和命名空間重複型號名稱
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擁有Account,僅爲DiscountSystem帳戶,並命名新模型Account :: DiscountSystem
如果我理解正確,「Account」的「DiscountSystem」位於名稱空間「Account」中。
他們:
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?
我選擇了這個方案,因爲該帳戶已經相當多 - 迄今爲止超過10,因爲每種類型的賬戶我要重載方法和變量。 我認爲語義上正確選擇不在%AccountName%,而不是在帳戶%AccountName%和naymspace帳戶::%帳戶名% 實際上,在示例Account :: Bonus-這是發明的「替代品」到系統的其他實體,他們有一個賬戶。 我很喜歡簡單的代碼添加到實體的帳戶名稱,它是,但在「重複」的變量出來這個錯誤。 – BigForceGun 2013-02-27 16:04:15