はじめに
ransackを使用して、数値項目と文字列項目を一緒に検索した際にエラーが出たので、対処法について記載します。
今回はid(Integer),name(String)でor検索を実装して、どちらかに検索対象文字が含まれていたら表示するというコードを記載している際にエラーが出ました。
エラー内容
38のついたid(No) / 商品名を検索しようと検索欄に38を入れて検索ボタンを押すと下記のエラーが出ました。
型が異なるので型変換してくださいねといった内容のエラーとなります。
修正方法
モデルに、ransacker
という拡張機能を使いidを数値から文字列に型変換をする。
例のコードはpsql対応のコードです。idカラムを文字列に型変換しています。
(DBはpsqlを使用していたのですが、ずっとpsqlでは対応していないCONVERT関数を使っておりエラーが出続けたので要注意です)
app/models/product.rb
ransacker :id do
Arel.sql("to_char(#{table_name}.id, '9999999')")
end
無事エラーも出ず検索することができました。