我正在使用Devise和has_scope gem来过滤选项,并且只想显示当前用户链接。
此作品
@links = current_user.links.all
这不是。有人可以解释一下我需要做些什么来使这项工作吗?
@links = apply_scopes(Link).current_user.all
答案 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