【发布时间】:2011-03-22 15:59:30
【问题描述】:
CanCan 中模型的 3 层嵌套与继承资源相结合时遇到问题。我读过我们应该将所有内容嵌套到 2 层,但我必须将所有内容放在 account 模型下,现在我尝试在 CanCan 中这样做:
load_and_authorize_resource :account
load_and_authorize_resource :project, :through => :account
load_and_authorize_resource :model, :through => :project
这给了我一个值为@project 的@account 变量,就像它正在覆盖它一样。 @project 是应该的,@model 也是。是我的错,CanCan 的,继承的资源还是 CanCan 不支持 3 级嵌套?另外,我在 IR 中为 ModelsController 执行此操作。
belongs_to :account, :finder => :find_by_name! do
belongs_to :project, :finder => :find_by_name!
end
另一个奇怪的事情是当我从 CanCan 的定义中删除 load_and_ 部分时。它可以工作,但我读到不使用load 部分可能很危险。
我可以只使用authorize_resource 还是应该用CanCan 做点什么?
【问题讨论】:
-
我不知道 CanCan 支持多少级别,但你可以自己加载,然后只调用
authorize_resource方法。 github.com/ryanb/cancan/wiki/Authorizing-Controller-Actions -
您可以使用 authorize_resource 只需确保在 authorize_resource 之前使用 before_filter 进行加载。
标签: ruby-on-rails ruby cancan nested inherited-resources