我的控制器中有一个如下所示的方法:
def some_request
user = User.find(params[:friend_user_id])
req = user.requests.build(:from_id => current_user.id)
# do more stuff!
end
现在这是一个名为RandomController
的控制器,以供参数使用。这是一个RESTful控制器,具有nonRESTful方法,如下所示。我只使用authorize_resource
而没有加载资源。我以为我可以通过在我的Ability类中执行以下操作来管理它:
class Ability
include CanCan::Ability
def initialize(user)
if user
can :manage, Request do |req|
req.user_id == user.id
end
end
end
这不是这样做的。如何修改some_request以授权创建请求?基本上我想要执行以下操作:允许任何经过身份验证的用户对属于他们的请求执行所有CRUD操作(:manage)。用户与has_many
的关系与请求关系如下:
has_many :requests
想法?
答案 0 :(得分:1)
一些事情:
req.user.id
,这可能没有加载用户资源(也可能不应该!)。将其更改为req.user_id
并自行保存用户资源的请求。current_user
对象,而不仅仅是user
。Ryan Bates在记录CanCan的功能和功能方面做得非常出色。有关更多详细信息,请查看RailsCast #192 episode(或plain-text ASCII-cast version)和GitHub project。