方法

ransackable_scopes メソッドを使用して実現する

環境

  • ruby: 2.7.6
  • rails: 5.2.8.1

実際のコード

例. User モデルの created_at カラムを基準として N 以内に作成されたユーザを取得する

[model]

# 引数なし
scope :within_one_month, -> {
  where('created_at >=', Time.zone.now - 1.months)
}

# 引数あり
scope :within_days, -> (day) {
  where('created_at >=', Time.zone.now - (day).days)
}

def self.ransackable_scopes(_auth_object = nil)
  %i(within_days within_one_month)
end

[erb]

<%=
  link_to(
    "1ヶ月以内に作成されたユーザ一覧",
    users_path(@q, q: { within_one_month: true }),
    class: "btn btn-primary mr-5"
  )

  link_to(
    "7日以内に作成されたユーザ一覧",
    users_path(@q, q: { within_days: 7 }),
    class: "btn btn-primary mr-5"
  )
%>

[controller]

通常通りで動作する

User.ransack(@q).result