Поиск объекта с диапазоном дат - PullRequest
0 голосов
/ 13 февраля 2019

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

У меня есть разные модели, которыми я управляю с одной и той же панелью управления

Например, я хочунайти:

  • пользователей, зарегистрированных в диапазоне дат
  • продаж в диапазоне дат
  • и т. д.

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

Я могу искать диапазон дат, но он работает только для первого фрагмента sales , в этом случае, если я нажимаюна следующей кнопке, которая пользователи перенаправление поиска на первом частичном sales

Это происходит потому, что шоу действия панели мониторинга по умолчанию sales Мне нужно что-то, что отображает текущую активную кнопку ...

Не могли бы вы помочь мне, пожалуйста, найти, как это сделать?

ниже некоторого кода:

dashboard.rb

class Dashboard

 attr_reader :date_from, :date_to

 def initialize(params)
    params ||= {}
    @date_from = parsed_date(params[:date_from],Time.now.beginning_of_month.to_date.to_s)
    @date_to   = parsed_date(params[:date_to], (Date.today + 1).to_s)
 end

 def article_date_range
    Article.where('created_at BETWEEN ? AND ?', @date_from, @date_to)
 end

 private 

 def parsed_date(date_string, default)
    Date.parse(date_string)
    rescue ArgumentError, TypeError
    default
 end
end

действие показа в dashboards_controller.rb

  def show
    @button ||= set_button || :sales
    @dashboard = Dashboard.new(params[:search])
    @articles = @dashboard.article_date_range
    @articles = @articles.order('created_at ASC') 
 end

  private 

  def set_button
   button = dashboard__params[:button]&.to_sym and [:sales, :users].include?(button) and button
 end

эта форма и кнопки находятся на приборной панели show.html.erb

<%= form_tag admin_dashboard_path, method: :get do  %>
    <%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
    <%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
    <%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>

 #the buttons that "redirect" to the appropriated partial

<% [:sales, :users, :articles].each do |button| %>
   <li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
    <%= link_to admin_dashboard_url(button: button) do  %>
      <%= button.capitalize %>
    <% end %>
   </li>
<% end %>

Обновление

Идея заключается в том, что пользовательвыберите диапазон дат, а затем нажмите на кнопки, чтобы просмотреть активность в выбранном диапазоне дат для продаж товаров или пользователей (без повторного выбора диапазона дат) enter image description here

1 Ответ

0 голосов
/ 13 февраля 2019

Я думаю, это потому, что dashboard__params[:button] всегда nil.Потому что в вашей форме поиска нет поля input с name, установленным на button.Если вы думаете о <%= link_to admin_dashboard_url(button: button) do %>, он находится вне html-формы.

Итак, метод set_button возвращает nil.

Так что первая строка вашего действия show всегда возвращает:sales, так как это значение по умолчанию, если set_button возвращает ноль.

Я бы предложил добавить поле hidden input в форму поиска.Затем используйте javascript для предотвращения поведения отправки формы по умолчанию, задайте значение этого поля hidden input с соответствующим значением (sales или user), а затем отправьте форму с использованием javascript.

Обновить1

show.html.erb

<%= form_tag admin_dashboard_path, method: :get do  %>
    <%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
    <%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
    <%= hidden_field_tag 'button', 'sales', id: 'button' %>
    <%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>

 #the buttons that "redirect" to the appropriated partial

<% [:sales, :users, :articles].each do |button| %>
   <li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
    <%= link_to admin_dashboard_url(button: button) id: "#{button}_click" do  %>
      <%= button.capitalize %>
    <% end %>
   </li>
<% end %>

Теперь, используя javascript перед отправкой формы поиска, установите значение hidden_filed.

Обновление 2

show.html.erb

<%= link_to '#', id: "#{button}_click", class: 'model_link'  do  %>
  <%= button.capitalize %>
<% end %>

javascript (при условии, что у вас есть jQuery)

$(document).ready(function() {
    $('.model_link').click(function() {
        var buttonName = $(this).attr('id').split('_')[0];
        $('#button').val(buttonName);
        $('form').submit();
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...