方法
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