如何在 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
我在 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