отфильтруйте сообщение по дате начала и окончания, используя сборщик даты в рельсах - PullRequest
0 голосов
/ 29 августа 2018

У меня есть страница индексирования, которая отображает все сообщения. На этой странице мне нужно настроить фильтр с помощью DatePicker, который обеспечивает дату начала и окончания. Когда пользователь нажимает кнопку поиска, он отправляет запрос метода get в контроллер с дата начала и дата окончания в качестве параметров. Мне нужно использовать метод области действия в модели поста для фильтрации поста. Как новичок для рельсов, я не знаю, как действовать после создания представления HTML. Пожалуйста, помогите мне.

Index.html.erb

<div class="container" >

  <% if params[:topic_id].present? %>
    <h2 align="center"><span class="em-text"><%= @topic.topicname %> Posts</span></h2><hr>
    <%= link_to "New Post", new_topic_post_path, :class => 'btn btn-primary new_one' ,remote: true%> <br><br><br>
  <% else %>
    <h2 align="center"><span class="em-text">All Posts</span></h2><hr>
  <% end %>
  <div>
    <input type="date" id="start_date">
    <input type="date" id="end_date">
  </div>

<div class="post_div">
  <%= render @posts %>
</div>
  <%= will_paginate @posts, renderer: BootstrapPagination::Rails %>
</div>
Частичное сообщение, которое представляет

  <div class="well">

    <% if ReadStatus.where(" user_id = ? AND post_id = ?",current_user.id,post.id).blank? %>
      <p style="color:Tomato;",class="read_text">Unread!!</p>
    <%end %>

    <h4><b><%= post.title  %> (<%= post.topic.topicname %>)</b></h4>
    <p><%= post.body %></p>

    <div>

      <%= image_tag post.image.url(:thumb) %>

    </div>

    <%= "Average Rating: "  %>
    <%=post.ratings.average(:rate).to_f.round(1)%>
    <br>
    <%= link_to "comments",topic_post_path(topic_id:post.topic_id, id:post.id) %>
    <%=post.comments.count%>
    <%= link_to "View Post", topic_post_path(topic_id:post.topic_id, id:post.id ), :class => 'btn btn-default btn1'%>
    <% if can? :update, post %>
      <%= link_to "Edit", edit_topic_post_path(topic_id:post.topic_id, id:post.id), :class => 'btn btn-primary' %>
    <% end %>
    <% if can? :destroy, post %>
      <%= link_to "Delete", [post.topic, post], method: :delete, data: {confirm: 'Are you sure?'}, :class => 'btn btn-danger' %>
    <% end %>

  </div>

Действие индекса после контроллера:

  def index
 @posts=Post.all
 end

1 Ответ

0 голосов
/ 29 августа 2018

Вот несколько предположений, которые я сделал для ответа на ваш вопрос. В случае каких-либо изменений, пожалуйста, дайте мне знать, и я изменю свой ответ соответственно.

Предположения:

  • У вас есть кнопка для отправки даты начала и окончания в качестве параметров поиска.
  • Поисковый запрос отправляется как 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 будет проверен, если пройдены даты начала и окончания и являются действительными датами.

Если допустимые даты начала и окончания пройдены, вы можете получить сообщения в течение указанного периода времени. В противном случае все сообщения извлекаются.

Надеюсь, это помогло вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...