我正在使用 Devise 和 has_scope gem 来过滤选项,并且只想显示当前用户的链接。
这有效
@links = current_user.links.all
这没有。有人可以解释我需要做什么才能完成这项工作吗?
@links = apply_scopes(Link).current_user.all
我正在使用 Devise 和 has_scope gem 来过滤选项,并且只想显示当前用户的链接。
这有效
@links = current_user.links.all
这没有。有人可以解释我需要做什么才能完成这项工作吗?
@links = apply_scopes(Link).current_user.all
一种解决方案是在带有参数 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 只是命名范围的应用参数。
我建议使用以下模式来申请所有权:
模型
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