有没有办法强制控制器继承路由声明中的另一个?例如,如果B类是A类的子类,则允许它使用该路由。像这样的东西?
match '/login/:controller', :constraint => { :inherits => A }
更新
作为一个更具体的例子,我有一个OAuthController接受来自多个来源的登录。让我们说谷歌,Facebook和Twitter。我有一个GoogleController,FacebookController和TwitterController,它们都是OAuthController的子类。所以我现在接受以下路线:
/login/google
/login/facebook
/login/twitter
我可能随时添加或删除其他人,但我不想改变我的路线。我也只想让:controller成为:OAuthController的子类。有没有办法强制执行?
答案 0 :(得分:1)
我认为没有开箱即用的支持。但是,可能有办法实现。看看"Rails Guides to Routing, Advanced Constraints"。它使用的request object并不是您想要的,但可能就足够了。
这个想法是这样的:
matches?(request)
中,执行您想要证明的内容。通过添加路径约束来集成它:
match "*path" => "login/:action",
:constraints => LoginConstraint.new
这是实施的代码:
class BlacklistConstraint
def initialize
... # necessary initialization here
end
def matches?(request)
... # Here is your check that returns true or false
end
end