0
0

ransackで"数値項目"と"文字列項目"を一緒に検索する場合

Posted at

はじめに

ransackを使用して、数値項目と文字列項目を一緒に検索した際にエラーが出たので、対処法について記載します。
今回はid(Integer),name(String)でor検索を実装して、どちらかに検索対象文字が含まれていたら表示するというコードを記載している際にエラーが出ました。

image.png

エラー内容

38のついたid(No) / 商品名を検索しようと検索欄に38を入れて検索ボタンを押すと下記のエラーが出ました。
型が異なるので型変換してくださいねといった内容のエラーとなります。

image.png

修正方法

モデルに、ransackerという拡張機能を使いidを数値から文字列に型変換をする。
例のコードはpsql対応のコードです。idカラムを文字列に型変換しています。
(DBはpsqlを使用していたのですが、ずっとpsqlでは対応していないCONVERT関数を使っておりエラーが出続けたので要注意です)

app/models/product.rb
  ransacker :id do
    Arel.sql("to_char(#{table_name}.id, '9999999')")
  end

無事エラーも出ず検索することができました。

スクリーンショット 2024-07-20 18.22.34.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0