2
我想從一個請求得到PARAMS,即:model
和scope
Rails的is_a(範圍)
然後,我想取:
eval("#{params[:model]}.#{params[:scope]}")
但是...如果一個delete_all
被傳入範圍,我會受到威脅...所以我想測試scope
是否真的是一個範圍。
任何方法來執行該? (我使用Rails3中)
我想從一個請求得到PARAMS,即:model
和scope
Rails的is_a(範圍)
然後,我想取:
eval("#{params[:model]}.#{params[:scope]}")
但是...如果一個delete_all
被傳入範圍,我會受到威脅...所以我想測試scope
是否真的是一個範圍。
任何方法來執行該? (我使用Rails3中)
這並沒有真正回答你的問題,但如果沒有辦法確定一個方法是範圍或沒有可能仍然是有用的:
您可以檢查所生成的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' – apneadiving 2011-02-13 16:11:00