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

2024-01-30

在我的小部件模型中,我有以下内容:

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 的过滤器吗?


改变self.all for self.scoped. all返回一个数组。

Rails 4 更新:all现在将返回一个范围。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Rails 3 中使用 Ransack 范围? 的相关文章

随机推荐