Ruby on rails 防止rails引擎中的控制器中的操作执行
防止在rails应用程序的某个控制器中执行操作,除非您可以使用Ruby on rails 防止rails引擎中的控制器中的操作执行,ruby-on-rails,ruby-on-rails-3.2,rails-engines,Ruby On Rails,Ruby On Rails 3.2,Rails Engines,防止在rails应用程序的某个控制器中执行操作,除非您可以使用 before_filter :validate_user, :only => [:create, :update] 这将阻止执行创建和更新,除非授权用户正在尝试。如果创建和更新操作位于rails引擎中的控制器中,则此操作不起作用 如何有条件地阻止在rails引擎中的控制器上执行操作?如果所讨论的validate\u user方法返回false,则过滤器链将停止,并且操作将不会执行 典型的模式如下所示: def validat
before_filter :validate_user, :only => [:create, :update]
这将阻止执行创建和更新,除非授权用户正在尝试。如果创建和更新操作位于rails引擎中的控制器中,则此操作不起作用
如何有条件地阻止在rails引擎中的控制器上执行操作?如果所讨论的validate\u user方法返回false,则过滤器链将停止,并且操作将不会执行
典型的模式如下所示:
def validate_user
unless (...valid_conditions...)
flash[:error] = "You're not logged in."
redirect_to(login_path)
return false
end
end
在停止过滤链之前,您可以做任何您想做的事情,但理想情况下,您可以先重定向或渲染某些内容。谢谢您的回复,塔德曼。问题是我要阻止的操作在引擎中,而引擎控制器不从主应用程序中的应用程序控制器继承。我找到的唯一解决方案是使用从主应用程序控制器继承的您自己的实现覆盖引擎命名空间中的应用程序控制器。这对我来说是错误的,但我又是一个长期的函数式程序员,我的OO意识并不那么敏锐,所以很多事情对我来说都是错误的。我希望对此有一些评论。您可以创建一个模块来定义此验证,并强制主应用程序控制器包含它。用猴子修补这样的东西并不总是一个好主意,但有时这是唯一的办法。