【发布时间】:2019-01-17 02:27:51
【问题描述】:
我有一个类,它接受一个范围数组并迭代地应用它们:
class AssignableLearningObjectives::Collector
def initialize(user:, only_self_assignable: false, scopes: [])
@user = user
@only_self_assignable = only_self_assignable
@scopes = scopes
end
.....
def available_objectives
objectives = assignable_objectives.or(manager_assigned_objectives).or(global_objectives).distinct
return objectives unless scopes.any?
scopes.each{ |scope| objectives = objectives.send(scope) }
objectives
end
我的问题是
scopes.each{ |scope| objectives = objectives.send(scope) }
objectives
有没有更好的方法来做到这一点?我希望有一个 rails 方法 apply_scopes 或类似的东西,但是找不到类似的东西。
我担心的是范围是从控制器发送的,用户可以提交范围为“destroy_all”或同样有趣的请求。
有没有一种简单的方法可以让 Rails 处理这个问题?或者我需要在将每个范围应用到集合之前手动检查它吗?
提前致谢
编辑:
如果需要,我很乐意单独验证每个范围,但即使这样也会导致问题。 rails 中有一种方法在 3.0.9 中被删除,我可以使用它,Model.scopes:
https://apidock.com/rails/v3.0.9/ActiveRecord/NamedScope/ClassMethods/scopes
但是,这已被弃用。有什么方法可以调用一个类来列出它的范围吗?我不敢相信 Rails 3 中有该功能并完全删除了......
【问题讨论】:
标签: ruby-on-rails ruby