twol’s diary

嵌ったことなど

ransackでキーワード引数を変数にする

ransackで検索を行う場合、キーワード引数で条件を指定するが、

Item.ransack(key_matches_any: value).result

ここの key_matches_any を変数にしたい。

キーワード引数の説明をよく見ると

1.9 でも、呼び出し側のキーワード引数はできていました。

log("Hello!", level: "INFO")

このキーワード引数は { :level => “INFO” } というハッシュとして当該メソッドに渡されます。 受け取り側でこのハッシュを分解する処理が必要でした。

Ruby 2.0.0 のキーワード引数

とあるので、従来どおりキーワード引数を使わずハッシュで渡してあげれば良い。

Item.ransack({"#{key}_matches_any" => value}).result

ということ。多分他のキーワード引数を使っているメソッドの実行でも使えると思う。

2019/12/04追記

普通にキーワード引数に変数を使えた!

Item.ransack("#{key}_matches_any": value).result

でおk