我正在尝试授权“位置”。在 url 中,参数不是 Location id,而是另一个名为“url_alias”的字段。所以在 LocationsController 中搜索正确的位置时,我不使用 params[:id]。
@location = Location.find_by(url_alias: params[:url_alias])
路线如下所示:
resources :locations, param: :url_alias
在ability.rb 模型中,我使用以下行;
can :read, Location, url_alias: "TestURL"
现在的问题是 CanCanCan 不使用我尝试通过 url_alias 字段授权的信息,我可以查看我想要的每个位置。当我用“qwert”之类的随机值替换“url_alias”时,我什至没有收到该字段不存在的错误。
通过将控制器中的 params[:id] 设置为随机值,一切都会再次按预期工作,cancancan 由 url_alias 等授权。我认为通过将 params[:id] 设置为来解决这个问题并不是一个真正干净的解决方案一个随机值以使 CanCanCan 正常工作。那么有人有更好的解决方案的想法吗?提前致谢!