[英]Keep namespacing of a controller when including a model in Rails
我試圖在包含模塊時保留類的名稱空間。 可以說我有這些模型:
class Shop < ApplicationRecord
self.abstract_class = true
end
class A::Shop < ::Shop
end
class B::Shop < ::Shop
end
而這個控制器:
module A
class ShopController < AuthenticatedController
include Basic::Features
def test
p Shop.new #YES! its a A::Shop
end
end
end
而這個模塊:
module Basic
module Features
def test
p Shop.new #Shop (abstract)
end
end
end
在上面的示例中,名稱空間在包含模塊時被覆蓋。 因為我想在代碼庫的多個位置使用Basic::Features
模塊,所以我想在A::Shop
和B::Shop
包含在控制器中時自動在A::Shop
和B::Shop
之間切換。
任何人都知道這是否可行以及如何實現。
這是一個選擇:
module Basic
module Features
def test
p Object.const_get('::' + self.class.to_s.split('::').first + '::Shop')
end
end
end
如果您擁有更深的命名空間,例如A::B::Shop
,它將無法工作,但可以使其正常工作。 同樣在rails中,可以使用deconstantize
代替split
。
我想你的代碼不起作用的原因是因為它正在尋找在A::ShopController
命名空間,因為沒有找到它然后嘗試根命名空間, ::
,發現Shop
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.