.current_user 使用范围时不起作用?

.current_user not working when using scopes?

我正在使用 Devise 和 has_scope gem 来过滤选项,只想显示当前用户链接。

这个有效

@links = current_user.links.all


这不是。有人可以解释我需要做什么才能完成这项工作吗?

@links = apply_scopes(Link).current_user.all

一个解决方案是在 link 中创建一个范围,它接受一个参数 user_id 并且在你的控制器 has_scope 中没有参数,并且只将散列传递给 apply_scopes 方法来覆盖范围的提供值。

Link 型号

scope :of_user,->(user_id){ where(user_id: user_id)}

Link 控制器

has_scope :of_user

只需调用 apply_scopes(Link, of_user: current_user.id).all 其中 of_user 是只是命名范围的应用参数。

我建议按照以下模式申请所有权:

型号

scope :by_owner, ->(user_id) { where(user_id: user_id) }

控制器

has_scope :by_owner, allow_blank: true,
  default: ->(controller){ controller.current_user } do |controller, scope|
    scope.by_owner(controller.current_user.id)
  end

默认应用by_owner范围。无需为您的操作添加任何其他范围。

一个例子:

def index
  render json: apply_scopes(Link)
end