在我的 Widget 模型中,我有以下内容:
scope :accessible_to, lambda { |user|
if user.has_role?('admin')
self.all
else
roles = user.roles
role_ids = []
roles.each { |r| role_ids << r.id }
self.joins(:widget_assignments).where('widget_assignments.role_id' => role_ids)
end
}
理想情况下,我想将此范围用作 Ransack 搜索结果的过滤器,因此在我的控制器中,我有:
def index
@q = Widget.accessible_to(current_user).search(params[:q])
@widgets = @q.result.order('created_at DESC')
end
这样做会产生以下错误:
未定义的方法“搜索”数组:0x007ff9b87a0300
我猜 Ransack 正在寻找一个 ActiveRecord 关系对象而不是一个数组。无论如何,我可以将我的范围用作 Ransack 的过滤器吗?