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

相關問題