Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在创建新对象时可以使用Cancan功能_Ruby On Rails_Ruby On Rails 3_Cancan - Fatal编程技术网

Ruby on rails 在创建新对象时可以使用Cancan功能

Ruby on rails 在创建新对象时可以使用Cancan功能,ruby-on-rails,ruby-on-rails-3,cancan,Ruby On Rails,Ruby On Rails 3,Cancan,我有以下资料: User has_many Listings Listing has_many Offers 非常基本。用户可以发布列表,其他用户可以对这些列表进行报价 在每个列表视图中,您可以看到列表的描述,以及它收到的所有报价的列表。同样,在这个视图中,有一个表单允许用户在此列表上提供报价 当然,如果我在看自己的上市公司,我不想出价。因此,我试图对要约的create方法添加一个限制,仅当它来自与发布此列表的用户不同的用户时才允许访问它。在我的能力课上,应该是这样的: can :create

我有以下资料:

User has_many Listings
Listing has_many Offers
非常基本。用户可以发布列表,其他用户可以对这些列表进行报价

在每个列表视图中,您可以看到列表的描述,以及它收到的所有报价的列表。同样,在这个视图中,有一个表单允许用户在此列表上提供报价

当然,如果我在看自己的上市公司,我不想出价。因此,我试图对要约的create方法添加一个限制,仅当它来自与发布此列表的用户不同的用户时才允许访问它。在我的能力课上,应该是这样的:

can :create, Offer if listing.user != user
这不起作用,因为列表没有在任何地方定义。当用户查看某个列表时,将调用此方法,因此,如何将此当前列表传递给cancan方法以有效地检查此限制


谢谢。

将CanCan能力检查移动到您创建新优惠的时间点之后。例如

#listing.rb
load_and_authorize_resource :except => :create

def create
    @offer = #whatever it is you want to do
    authorize! :create, @offer

end