0
只是一個非常簡單的問題,我在rails中有一個lib文件夾內的模塊。在導軌模塊上使用cancan
在該模塊上,如果我們執行諸如Company.accessible_by(current_ability)之類的操作,則會出現名稱錯誤,其中current_ability未定義。
有人知道這個解決方案嗎?由於current_ability似乎只能在控制器中識別。
只是一個非常簡單的問題,我在rails中有一個lib文件夾內的模塊。在導軌模塊上使用cancan
在該模塊上,如果我們執行諸如Company.accessible_by(current_ability)之類的操作,則會出現名稱錯誤,其中current_ability未定義。
有人知道這個解決方案嗎?由於current_ability似乎只能在控制器中識別。
您需要將current_ability傳遞到模塊中。 與會話和參數數據(以及current_user,如果您使用的是devise)一樣,您無法訪問您自己創建的這些內部模型或類。
這實際上是一件好事,因爲您不希望業務對象依賴於Web堆棧。 這些事情的一般方法(也適用於模型)要麼通過引用您傳入的current_ability來構造對象,要麼通過方法調用本身來構造對象。 下面是一些示例代碼:
class Foo
def initialize(ability)
@current_ability = ability
end
def list_companies
Company.accessible_by(@current_ability)
end
end
或者,如果你只需要一個電話:
class Foo
def list_companies(current_ability)
Company.accessible_by(current_ability)
end
end
這兩種情況是完全有效的,讓你輕鬆與模擬能力目標測試代碼。