shops habtm products
,反之亦然。
user has many shops
和shop belongs to user
在我的Product=>:create
表单中,我可以使用复选框(将shop_id作为参数发送)来检查产品所属的所有商店。
确保用户不创建产品并将其与cancan中不拥有的商店相关联的最佳方法是什么?
这似乎是一个非常简单的用例,但我没有找到一个好的例子=(
目前,我正在这样做。
can [:create], Product, do |p|
(p.shop_ids - user.shop_ids).empty?
end
由此,我读了它,因为p.shop_ids
必须是user.shop_ids
的完整子集才能在减号操作后得到一个空数组。
我不知道我是否存在任何逻辑缺陷,或者是否有更简单的检查方法?
答案 0 :(得分:1)
CanCan 2.0对此有好处。
can :create, :products, :shops => { :id => user.shop.id }
您可能想尝试一下,但它仍处于alpha状态。
P.S。它对ability.rb
有重大的API更改。值得注意的是,如果你决定尝试一下 - > Devise & CanCan — Issues with CanCan 2.0 API