0

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

这有效

@links = current_user.links.all


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

@links = apply_scopes(Link).current_user.all
4

2 回答 2

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 只是命名范围的应用参数。

于 2015-02-16T00:56:31.977 回答
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
于 2018-12-27T17:31:50.013 回答