2011-12-23 77 views
3

我有一個多租戶rails應用程序啓動並運行。我想限制在當前的租戶(喜歡這裏這篇文章機型) 模型繼承這樣Rails的條件類繼承模型

class Article < TenantScoped 

end 

這個偉大工程的tenantscoped模型。我只收到範圍爲當前租戶的對象。

但現在我即將創建一個管理界面,我希望能夠向所有租戶添加文章。但我的管理界面充當租戶,而模型正在被限制。 結束時不顯示任何條目。

我提議到這個最好的解決辦法是有條件地從租戶繼承範圍的模型這樣

class Article 

    unless SudoTenant.current? 
    < TenantScoped 
    else 
    < ActiveRecord::Base 
    end 

end 

我一直在尋找周圍的Ruby類和條件還沒有找到繼承任何事情。我的語法在這裏是錯誤的,或者這甚至可能嗎?

在此先感謝

+1

這是不可能的。你可以有條件地包含基於狀態條件的模塊,但不包括繼承。 – 2011-12-23 03:47:21

回答

0

您可以使用塊語法定義類:

if SudoTenant.current? 
    Article = Class.new(ActiveRecord::Base) do 
    # your code 
    end 
else 
    Article = Class.new(TenantScoped) do 
    # your code 
    end 
end 

我強烈建議您使用的混入,而不是有條件繼承,這是更清潔,更清晰,更明顯。

0

不完全是你要求的,但我碰巧正在做相同的事情(在租戶應用上的全局文章),並且我剛創建了一個管理員租戶,以便在我的全球文章中使用它。

我有這樣的事情:

#article.rb 
def self.global 
    unscoped.where(:company => Company.admin) 
end 


#company.rb 
def self.admin 
    where(:name => 'admin').first # this can pretty much be anything that fits to you. 
end