我正在使用Cancancan设置管理功能。我有一个房间的协会
has_one :group, through: :property
我知道人们无法使用cancancan传递对象,但我们可以使用哈希来检查异能。
#ability.rb
if user.has_role?(:admin)
can :manage, Room, :group => { :id => user.group_id }
end
当我加载索引,显示,更新,编辑和销毁方法时,上述能力检查有效,但在我加载新方法或创建方法时不起作用。 我知道Cancancan可以将任何条件作为哈希传递,例如this,但我不认为它传递了我的哈希,因为组被设置为关联而不是每个房间对象上的列。
#rooms_controller.rb
class RoomsController < ApplicationController
load_and_authorize_resource
def new
@room = Room.new
end
end
我的问题是,如何在new和create方法上检查此功能,最好不要在我的对象中添加新列。
感谢任何帮助
由于
答案 0 :(得分:1)
如果您使用的是load_and_authorize_resource
,则不应在@room = Room.new
方法中执行new
。 load_and_authorize_resource
方法适合您。所以我的假设是你要覆盖它正在初始化的那个。
同样适用于RoomsController
中的所有其他方法,除非您想要覆盖图像的加载方式(急切加载等)或搜索。