2011-12-23 64 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