如何在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.scoped
。 all
返回一个数组。
Rails 4的更新:现在all
都会返回一个范围。