使用gems单元格和declarative_authorization(以及Devise),我试图弄清楚如何包含allowed_to?进入细胞模板。到目前为止,我已将此添加到我的单元格Cell(Devise一个适用于它的助手):
class SidebarCell < Cell::Rails
include Devise::Controllers::Helpers
helper_method :current_user
include Authorization::AuthorizationHelper
helper_method :permitted_to?
def display(args)
@object = args[:object]
@notice = args[:notice]
@alert = args[:alert]
render
end
end
但是,由于declarative_auth帮助程序模块使用以下代码,这是一次轰炸:
def permitted_to? (privilege, object_or_sym = nil, options = {}, &block)
controller.permitted_to?(privilege, object_or_sym, options, &block)
end
显然这给了
undefined local variable or method `controller' for ...
更新:
经过一番思考,我不确定这会对Cell有效。 Declarative_auth需要控制器基于它的规则,但Cells与该控制器无关。在我看来,这两者是不兼容的,除非我将控制器的引用传递给单元格?开始认为Cell不是最佳选择。
答案 0 :(得分:1)
如果添加
,这将有效helper_method :controller
只是代表:
def controller
parent_controller
end
很抱歉给您带来不便,但Rails中的整个帮助程序架构很糟糕:http://nicksda.apotomo.de/2011/10/rails-misapprehensions-helpers-are-shit/