2012-04-20 3 views
0

私はいくつかのマイナーなJSONオブジェクト(主に小さなリソース、空想はありません)を返す小さなAPIを開発しましたが、APIの1つを拡張する必要がある状況にあります現在のところ、エンドポイントはちょうど何かを返すことができます。例についてはRails 3:動的ベースのMySQLクエリのパラメータをループする

- 現在、私は私のルートに次き:

resources :school_types do 
     resources :schools 
     end 

ので、ユーザーは/api/v1/school_types/1/schools.jsonにアクセスした場合、学校の全体リストはschool_type_id

まあ基づいて戻ってくる、私は /api/v1/school_types/1/schools.json?param_1=foo&param_2=bar

したがって、ActiveRecordコールを構築すると、それは動的に生成されます渡されたパラメータに基づいて、SQLクエリを食べた

これは私がこれまで持っているものです。LOL、" = [\"state_id\", \"1\"] AND = [\"district_id\", \"1\"] AND = [\"school_type_id\", \"1\"] AND "

は明らかに私が何か間違ったことをしています:

conditions = "" 
     params.except(:controller, :format, :action).each_with_index do |value, index| 
     conditions << "#{params[index]} = #{value} AND " 
     end 

は、これは条件変数出力されます。

答えて

2

独自のツールではなく、MetaSearchのようなツールを使用することを強くおすすめします。あなたの現在の実装は、SQLインジェクション攻撃の対象となります。

+0

返信いただきありがとうございます。私はあなたが提案した宝石を見てみるつもりです。このようなこともできますか? http://stackoverflow.com/a/6421870/282343 – dennismonsewicz

+0

はい。サポートする必要のあるパラメータの数に応じて、MetaSearchを実装するよりもカスタムスコープを使用するほうが簡単です。重要なことは、単に文字列を連結して補間するのではなく、Railsメソッドを使用してクエリをアセンブルすることです。 – Brandan