.current_user在使用范围时不工作?

时间:2015-02-15 22:46:35

标签: ruby-on-rails ruby-on-rails-4 has-scope

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

此作品

@links = current_user.links.all


这不是。有人可以解释一下我需要做些什么来使这项工作吗?

@links = apply_scopes(Link).current_user.all

2 个答案:

答案 0 :(得分:2)

一种解决方案是在链接中创建一个带有参数user_id的范围,并在控制器has_scope中创建一个没有参数的范围,只需将一个哈希值传递给apply_scopes方法以覆盖提供的范围值。

链接模型

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

链接控制器

has_scope :of_user

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

答案 1 :(得分:0)

我建议采用以下模式申请所有权:

模型

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