1

我有一个小问题。

我有以下控制器,如下所示:

class ApplicationController < ActionController::Base
attr_accessor :perms
helper_method :set_permissions

  def set_permissions *permissions
    self.perms = permissions
  end
end

class ApiController < ApplicationController

  set_permissions :api

end

class Api::TokenController < ApiController

  set_permissions :none

end

Rails 似乎认为set_permissions它不存在,即使它显然存在于继承链中(我什至将它设置为辅助方法)。

错误发生在TokenController.

另外,我把它作为一种辅助方法,因为老实说,它以前不起作用,我认为它可能会修复它。

我究竟做错了什么?

ps 我已经尝试附加Api::到 api 控制器,因为它位于 api 目录中,但什么也没做。

编辑:对不起,错误的控制器,我需要多加注意。

编辑:好的,所以我将以下代码放入:在和子控制器中的defset_permissionsApplicationController

ap 'ApplicationController responds'
ap self.respond_to?(:set_permissions)

并且它对所有人的响应都是错误的,它正在被定义,所以发生了什么?

ps ap 是awesome_print,你知道的。

编辑:所以,添加self.def set_permissions现在它正在被拾取,但现在它正在发生

undefined method `perms=' for ApiController:Class

编辑:我更改self.@并修复了问题,我忘记放入我拥有的attr_accessor代码(更新代码以显示这一点。控制器不喜欢 attr_accessor 或其他东西吗?

4

1 回答 1

1

您将set_permission方法定义为ApplicationController的实例方法,而您尝试将其称为类方法。您可能需要将其定义为私有类方法 insead:

class ApplicationController < ActionController::Base
  # ...
  class << self
    private
    def set_permissions(*permissions)
      self.perms = permissions
    end
  end
end
于 2014-05-20T09:28:51.913 回答