加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在Rails 3中使用带Ransack的范围?

发布时间:2020-12-17 03:35:29 所属栏目:百科 来源:网络整理
导读:在我的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.rol
在我的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

这样做会产生以下错误:

undefined method `search’ for Array:0x007ff9b87a0300

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

解决方法

为self.scoped更改self.all. all返回一个数组.

Rails 4的更新:现在所有人都将返回一个范围.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读