2011-02-13 91 views
2

我想從一個請求得到PARAMS,即:modelscopeRails的is_a(範圍)

然後,我想取:

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

但是...如果一個delete_all被傳入範圍,我會受到威脅...所以我想測試scope是否真的是一個範圍。

任何方法來執行該? (我使用Rails3中)

回答

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 
+0

謝謝,我希望還有更多'Railsy' – apneadiving 2011-02-13 16:11:00