Вот несколько предположений, которые я сделал для ответа на ваш вопрос. В случае каких-либо изменений, пожалуйста, дайте мне знать, и я изменю свой ответ соответственно.
Предположения:
- У вас есть кнопка для отправки даты начала и окончания в качестве параметров поиска.
- Поисковый запрос отправляется как HTML-запрос.
- Фильтр основан на времени создания сообщения.
- Вы используете Rails 5 +
Мое решение вы можете найти ниже:
Заменить
<input type="date" id="start_date">
<input type="date" id="end_date">
с
<%= form_tag posts_path, method: :get do %>
<%= text_field_tag 'start_date', params[:start_date], placeholder: "Enter Start Date" %>
<%= text_field_tag 'end_date', params[:end_date], placeholder: "Enter End Date" %>
<%= submit_tag 'Search' %>
<% end %>
Добавьте следующий код в ваш контроллер Posts:
before_action :can_search, only: %i(index)
def index
@posts = @can_search ? Post.where(created_at: Time.parse(params[:start_date])..Time.parse(params[:end_date]))
end
private
def can_search
@can_search = false
return unless (params[:start_date].present? && params[:end_date].present?)
@can_search = (Time.parse(params[:start_date]) rescue nil).present? && (Time.parse(params[:end_date]) rescue nil).present?
if @can_search
@can_search = Time.parse(params[:start_date]) < Time.parse(params[:end_date]
end
end
Представленная форма позволяет отправлять даты начала и окончания как params
в действие индекса.
Метод before_action
будет проверен, если пройдены даты начала и окончания и являются действительными датами.
Если допустимые даты начала и окончания пройдены, вы можете получить сообщения в течение указанного периода времени. В противном случае все сообщения извлекаются.
Надеюсь, это помогло вам.