【问题标题】:Rails is_a?(Scope)Rails is_a?(范围)
【发布时间】:2011-02-13 15:41:24
【问题描述】:

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

然后,我想获取:

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

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

有什么方法可以做到吗? (我使用的是 Rails3)

【问题讨论】:

    标签: ruby-on-rails scope


    【解决方案1】:

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

    您可以检查生成的 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
    

    【讨论】:

    • 谢谢,我希望有更多的“Railsy”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2016-07-11
    • 1970-01-01
    • 2017-06-25
    • 2016-08-23
    • 2013-08-06
    • 2014-11-27
    相关资源
    最近更新 更多