0

我遇到轻微问题。Rails应用程序控制器方法在儿童中未定义

我有以下控制器设置出像这样:

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内。

此外,我把它作为一个辅助方法,因为,老实说,它以前没有工作,我认为它可以解决它。

我在做什么错?

p.s.我已经尝试将Api::附加到api控制器,因为它位于api目录中,但它什么都不做。编辑:对不起,错误的控制器,我需要更多的关注。编辑:对不起,错误的控制器,我需要更多的关注。

编辑:好了,我把下面的代码:该DEF下set_permissionsApplicationController和子控制器:

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

,并为所有这些回应假的,它被定义成这是怎么回事?

p.s. ap是awesome_print,就这么你知道。

编辑:因此,加入self.def set_permissions,现在它正在回升,但现在它将会

undefined method `perms=' for ApiController:Class 

编辑: 我改变self.@它固定provlem,我也忘了投入我有一个attr_accessor代码(更新代码来显示这一点。不要控制器不喜欢attr_accessor或财产以后?

+1

您在'set_permisions'和'set_permissions'之间有所不同 - 是问题所在吗? –

+0

哎呀,没有注意到拼写错误,谢谢指出。 – Thermatix

+0

这是否解决了它? –

回答

1

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

class ApplicationController < ActionController::Base 
    # ... 
    class << self 
    private 
    def set_permissions(*permissions) 
     self.perms = permissions 
    end 
    end 
end 
+0

这不是真的会起作用,我需要能够为每个控制器继承级别(或每个控制器)设置不同的权限。这就是为什么我试图使用继承的方法来设置每个控制器它们而不定义每个控制器的方法。 – Thermatix

+0

@ user3536548我编辑了我的答案。 –

+0

这几乎是答案,我基本上必须定义和使用像单身的方法。 – Thermatix

相关问题