如何在 rails 中使用 Ransack 搜索日期

How can I search for dates using Ransack in rails

我在 rails 中使用 Ransack。我完全愿意将其拉出来并使用可能与日期更好地搭配的不同东西。我只是使用 ransack 因为我对它有点熟悉。数据库是 Postgres。

我有一个带有 'check_out_date' 列的订单模型。

我只想搜索特定日期的订单。

这是我的表格:

    <%= search_form_for @q do |f| %>
    <%= f.date_field :check_out_date_cont  %>
    <%= f.submit 'search', class: "btn btn-warning" %>
    <% end %>

这是我的控制器:

  def index
    @q = Rental.ransack(params[:q])
    @rentals = @q.result(distinct: true)
  end

我已经研究了这个问题,并且我一直看到有人像我在这里所做的那样在模型中添加掠夺者:

  ransacker :check_out_date, type: :date do
    Arel.sql('date(check_out_date)')
  end

我会说这个。我有洗劫工作否则。例如,我可以轻松地放入 'title' 搜索字段,并且效果很好。但是,当我按日期搜索时,我仍然得到以下结果:

PG::UndefinedFunction: ERROR:  operator does not exist: date ~~* unknown
LINE 1: ...".* FROM "orders" WHERE "orders"."check_out_date" ILIKE '202...
                                                             ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

任何人 运行 通过简单的解决方案解决这个问题?

您的查询参数名为 check_out_date_cont_cont 最后表示要搜查您想要 check_out_date 列包含给定字符串的所有记录 - 这就是为什么它使用 ILIKE 运算符,它根本不适用于日期。

您需要将其更改为 check_out_date_eq 才能正常工作。

参考:https://github.com/activerecord-hackery/ransack#search-matchers