Ransack::Search から値を取得する

実現したいこと

Ransack で検索を実行した際に、検索に使用された値をRansack::Searchオブジェクトから簡単に取得する方法はないでしょうか?

発生している問題・分からないこと

例えば、controller内で以下のような検索を実行していたとします。

該当のソースコード

ruby

1def ransack_params2 params.fetch(:q, {}).permit(3 :created_at_gteq4 ).reverse_merge(5 created_at_gteq: Time.now.beginning_of_year 6 )7end

ruby

1def index2 @q = User.ransack(ransack_params)3 @users = @q.result 4end

試したこと・調べたこと

上記の詳細・結果

以下のような形で、検索に使用された値を取得することは可能ですが、非常に複雑な形です。

ruby

1@created_at_gteq = @q.conditions.select{2 |c| c.attributes.map(&:name).include?("created_at") &&3 c.predicate.name == "gteq"4}.map(&:values).flatten.map(&:value).first

またcontroller内で以下のように宣言しておけば、View内で取り回すことも可能ですが、
パーシャルなどに引き回すことを考えると、@qだけを渡して、後で値を取り出せたほうが便利です。

ruby

1@created_at_gteq = ransack_params[:created_at_gteq]

例えば、以下のような形で簡単に値を取り出すようなメソッドはサポートされていないでしょうか?

ruby

1@q.condition.value(:created_at_gteq) # => "2024-01-01 00:00:00" or nil

コメントを投稿

0 コメント