我在我的控制器中使用attr_accessor
來存儲在applicationController中定義的方法中設置的權限,但我遇到了問題。 如果我這樣做:attr_accessor控制器中存儲權限
class ApplicationController < ActionController::Base
attr_accessor :perms
def self.set_permissions *permissions
self.perms = permissions
end
def check_permissions
print self.perms
end
end
然後軌是perms=
不存在
索賠,如果我做的:
class ApplicationController < ActionController::Base
attr_accessor :perms
def self.set_permissions *permissions
@perms = permissions
end
def check_permissions
print @perms
end
end
@perms
在check_permissions
在任何子控制器nil
,我查有什麼實例方法可用:print self.instance_variables
但@perms
沒有出現;可能是因爲正在爲類實例設置@perms
而不是在調用動作時創建的控制器的對象實例
發生了什麼事?控制器上的導軌不像attr_accessor
?我怎樣才能得到這個工作,所以我可以在類中設置權限,讓他們接觸到這個類的任何對象,所以我可以將它們像這樣:
class Api::ApiController < ApplicationController
set_permissions :api
before_action :check_permissions, except: :set_permissions
end
我不得不使用self.set_permissions
,否則它聲稱,當我嘗試設置它們時,set_permissions不存在(因爲它是一種對象方法而不是類方法)
編輯: 爲了說明起見,我希望在控制器中設置權限(但對於每個控制器不同) ;對於該控制器的任何實例(即爲一個操作創建的對象實例)或從該控制器繼承的任何控制器(例如節點控制器從api控制器繼承,因此使用相同的權限),除非它已在該繼承控制器中分別定義(令牌控制器從api控制器繼承,但需要是免費的,因此一個人可以在不需要權限的情況下獲得令牌)。
嗯,剛試過它,它的工作,非常感謝。 – Thermatix