2

Ransack を使用して検索しようとしていますが、ID と文字列を一緒に検索しようとすると問題が発生します

:id_or_title_or_user_username_cont

エラーが発生します

ActionView::Template::Error (PG::UndefinedFunction: エラー: 演算子が存在しません: 整数 ~~* 整数

私もこれを試しました

:id_eq_or_title_or_user_username_cont

次のエラーが発生します

Ransack::Search の未定義メソッド「id_eq_or_title_or_user_username_cont」

カスタム述語以外のランサックまたはカスタム述語を使用して ID と文字列を一緒に検索する適切な方法は何ですか?

4

4 に答える 4

2

次の記事Finding records by ID with Ransackが答えを提供しています。


  # Cast the ID column to a string in PostgreSQL
  # when searching with Ransack.
  # Allows searches with _cont and _eq predicates.
  # From https://github.com/ernie/ransack/issues/224
  ransacker :id do
    Arel.sql("to_char(\"#{table_name}\".\"id\", '99999999')")
  end

提供された回答は、もともとこの github の問題からのものです: https://github.com/activerecord-hackery/ransack/issues/224

于 2019-09-20T06:47:18.110 に答える
2

他の回答よりももう少し詳細が必要だったので、ここにあります。

_contLIKE クエリはそのような列では機能しないため、整数列の検索は機能しません。クエリを機能させるには、列を整数から文字列にキャストする必要があります。ransackerモデルでは、次の呼び出しでそれを行うことができます。

# app/models/your_model.rb
class YourModel

  # For Postgres
  ransacker :id do
    Arel.sql("to_char(\"#{table_name}\".\"id\", '99999999')")
  end

  # For MySQL
  ransacker :id do
    Arel.sql("CONVERT(`#{table_name}`.`id`, CHAR(8))")
  end

その後、 のような検索述語を使用できますid_cont

于 2021-05-28T14:29:24.293 に答える
-2
ransacker :id_to_s do 
  Arel.sql("regexp_replace(to_char(\"#{table_name}\".\"id\", '9999999'), ' ', '', 'g')")
end
于 2016-01-21T11:27:03.297 に答える