Rails is_a?(范围)

时间:2011-02-13 15:41:25

标签: ruby-on-rails scope

我想从请求中获取参数,即:modelscope

然后,我想去取:

 eval("#{params[:model]}.#{params[:scope]}")

但是......如果在范围内传递了delete_all,我就会受到威胁......所以我想测试scope是否真的是一个范围。

任何执行此操作的方法? (我正在使用Rails3)

1 个答案:

答案 0 :(得分:2)

这并不能真正回答您的问题,但如果无法确定方法是否为范围,则可能仍然有用:

您可以检查生成的SQL

eval("#{params[:model]}.#{params[:scope]}.to_sql")

并检查危险的SQL调用(DELETE,TRUNCATE,UPDATE,INSERT)。

编辑:

您还可以检查您在模型上调用的作用域是在此模型中定义的,而不是在ActiveRecord :: Base等父类中定义。

model.method(scope.to_sym).owner == model

编辑2:

您还可以在空记录集上调用范围,并检查结果的类。对于范围,它将是ActiveRecord :: Relation,但对于delete_all,它将是Fixnum:

model.where('0').scope.class == ActiveRecord::Relation
相关问题