如何在Rails 3中使用Ransack的范围?

在我的Widget模型中,我有以下内容:

scope :accessible_to, lambda { |user| if user.has_role?('admin') self.all else roles = user.roles role_ids = [] roles.each { |r| role_ids < role_ids) end } 

理想情况下,我想将此范围用作Ransack搜索结果的filter,因此在我的控制器中我有:

 def index @q = Widget.accessible_to(current_user).search(params[:q]) @widgets = @q.result.order('created_at DESC') end 

这样做会产生以下错误:

未定义的方法`search’for Array:0x007ff9b87a0300

我猜Ransack正在寻找一个ActiveRecord关系对象,而不是一个数组。 无论如何我可以使用我的范围作为Ransack的filter吗?

self.scoped更改self.scopedall返回一个数组。

Rails 4的更新:现在all都会返回一个范围。