.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
我正在使用 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