2017-12-21 4 views
1

のクエリを作成RailsのSQL:ユーザー入力に基づいて、私は、動的クエリを作成しようとしています動的

if a 
    conditions << ["fname like (?)"] 
    sql_params << "abc" 
end 
if b 
    conditions << ["lname like (?)"] 
    sql_params << "def" 
end 
if c 
    cconditions << ["middle like (?)"] 
    sql_params << "xyz" 
end 

results = Model.where(conditions.join(' AND '), sql_params) 

条件が正しい構文で取得しながら、sql_paramsは配列として記載されています。これは私が必要なものをしながら、以下のクエリ

Model.where("fname like (?) AND lname like (?) AND middle like (?)", ["abc","def","xyz"]) 

を形成すること

Model.where("fname like (?) AND lname like (?) AND middle like (?)", "abc","def","xyz") 

私はsql_paramsアレイ上のいくつかのマップ/参加するなどのオプションを試してみましたが、何も働いていたんです。

答えて

2

あなたは(splat operatorとして知られている)*sql_paramsを渡す必要があり、すなわち

results = Model.where(conditions.join(' AND '), *sql_params) 
+0

あなたは命の恩人です!本当にありがとう。私はこれに多くの時間を費やしました。 – KavitaC

1

あなたはまさにこれを生成する必要がありますか?

Model.where("fname like (?) AND lname like (?) AND middle like (?)", "abc","def","xyz") 

フォームの何か:なぜ、むしろ文字列をいじりよりも、作品によってクエリピースを構築していない

Model.where('expr1').where('expr2').where('expr3') 

Model.where('expr1 AND expr2 AND expr3') 

に相当しているのですか?このようなもの:

query = Model.all 
query = query.where('fname like ?', 'abc') if a 
query = query.where('lname like ?', 'def') if b 
query = query.where('middle like ?', 'xyz') if c 

あなたにも同じ結果が得られます。

関連する問題