問題はハッシュの値は、(一例として)where句で成功するためには正しいデータ・タイプではないかもしれないです問い合わせます。いくつかの文字列であり、いくつかの数字、いくつかのブール:は私が午前
例えば、フィルタのURLに渡されるパラメータがあります。最終的なハッシュは、filter_parms:{id: "1"、アクティブ: "true"、名前: "John"}などのようになります。問題は明白でなければなりません。すべてが文字列として扱われます。私はループしたり、コーディング混乱を生ずることなく、適切なデータ型(例えば、 "1" => 1、 "true" => true)になるように値を自動的に強制する方法を見つけようとしています。
最終目標は、このようなものでハッシュを使用できるようにすることです:Person.where(filter_parms)。これはStringフィールドではうまく動作しますが、booleanとintでは正しく動作しません。
Iはsanitize_sql_for_conditionsを使用して試みたが、その出力は正確に変更を加えることなく、入力データ型と一致します。
私が行方不明だということを明らかに何かがあると想像。ご協力いただきありがとうございます。フィールドが"true"
リテラル文字列を含むことができる場合のように、間違った値を解釈するには、ここでリスクをあります
def normalize(value)
case (value)
when 'true'
true
when 'false'
false
when 'null','nil'
nil
when /\A-?\d+\z/
value.to_i
when /\A-?\d+\.\d+\z/
value.to_f
else
value
end
end
、あなたが保存されていること、これはそれをマングルうとします
'Model.columns'とそれらの'#sql_type'を見れば、エラーを起こしにくいものにすることができます。 –
私は間違いなく、そのモデルによって駆動された何らかの種類の消毒剤を通して価値を駆り立てる方法があることを期待していました。投稿されたフォームデータでRailsがこれをどのように処理するかはわかりません。私は、各parmのデータ型を明示的に宣言する何かがポストにあると仮定します。 – vicmorrowshead
@muistooshort - ModelColumnsが少なくとも一貫性があり、徹底しているかどうかをチェックアウトします。 – vicmorrowshead