【问题标题】:Using CanCan within a gem在 gem 中使用 CanCan
【发布时间】:2013-05-06 19:33:19
【问题描述】:

我不确定这是否可行,但我想在我自己的 gem 中使用 CanCan。我试过以下代码:

module DynamicMenu
  require 'engine' if defined?(Rails)
  require 'cancan'

    module MenuItems
      #The new dynamic_menu encapsulates 
      class DynamicMenu
    def initialize
    @actionMenuItems ||= []
    end

    def newmenuitem(name,link,method=:get,confirm="Are you sure?")
          genlink = ""

          if method==:delete
            genlink += "<a href=\"#{link}\" data-confirm=\"#{confirm}\" data-method=\"delete\" rel=\"nofollow\">
     #{name}</a>".html_safe
          elsif link==:submit
            genlink += "<a href=\"#\" data-submit=\"true\">#{name}</a>".html_safe
          elsif link == :back
            genlink = "<a href=\"#\" data-back=\"true\">#{name}</a>".html_safe
          else
           genlink = "<a href=\"#{link}\">#{name}</a>".html_safe
          end      
  @actionMenuItems << genlink.html_safe
end

    def newCanCanProtectedItem(name,link,method=:get,confirm="Are you sure?")
       actions = Rails.application.routes.recognize_path(link)
    if defined?(CanCan) and can? actions[:action],actions[:controller].singularize.capitalize
        newmenuitem(name,link,method,confirm)
     else
       @actionMenuItems << "CANCAN NOT DEFINED OR ABILITY.RB PROBLEM";
     end
end

    def getItems
   return @actionMenuItems
    end

  end


  end
end

执行此操作时,我得到未定义的方法can?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 gem cancan


    【解决方案1】:

    CanCan 需要依赖一个技能类。所以,不知何故你需要包括一个能力类。基本内容如下所示:

     class Ability
     include CanCan::Ability
         def initialize(user)
         end
     end
    

    我使用了一个假设,但这可能应该是一个初始化器或其他东西,该类被称为能力。

    在 gem 中使用 CanCan 时,您必须创建一个能力类的新实例,或者将其传入。我做到了:

    ability = Ability.new(current_user) #You have to pass in a user
    

    必须传入一个用户。但是,似乎 current_user 没有在 gem 的范围内定义。所以,我也将一个用户传递到我的方法中。

    之后我能够做到:

    ability.can? actions[:action],actions[:controller].singularize.capitalize
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多