Как создать интерактивную ссылку с областью действия с помощью Ransack и Rails

У меня есть требование иметь некоторые области в качестве интерактивных ссылок в моем приложении. Это позволит пользователю изменять отображаемые данные по мере необходимости. Используя Ransack и его функциональность ransackable_scopes, я очень близок. Мне нужно сохранить любую фильтрацию, которую сделал Ransack, когда пользователь щелкает область.

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

Вот моя модель:

class Product < ActiveRecord::Base    

    scope :upward_trending, -> { where( "status > ?", 100).where(above_revenue_average: true).order('end_date DESC') }
scope :downward_trending, -> { where( "status < ?", 100).order('end_date DESC') }

    def self.ransackable_scopes(auth_object = nil)
    [:upward_trending, :downward_trending]
    end
end

Теперь, на мой взгляд, я добавил эти две области в качестве скрытых полей, например:

        <%= search_form_for @q, :html => {:class => 'filter-form'} do |f| %>

        <div>

            <%= f.hidden_field :upward_trending %>
            <%= f.hidden_field :downward_trending %>

            <%= f.label :name_cont, "Search", class: 'label' %>
            <%= f.search_field :name_cont, class: 'form-control input-box', :placeholder => 'Search' %>

        </div>

        <div>

            <%= f.submit "Filter", class: 'btn btn-primary' %>
            <%= link_to "Clear Search", request.path, class:"btn btn-default" %>

        </div>
        <% end %>

Отсюда мне просто нужно создать ссылки, и это должно работать. Как лучше всего это сделать?

Спасибо за вашу помощь!


person bnussey    schedule 18.02.2015    source источник


Ответы (2)


Я планировал сделать грязный путь. (Но пока нет)

  • создайте search_form_for каждую область (у вас будет 2 формы для вашего случая)
  • установить скрытое поле с собственными критериями (как вы делаете в своем коде, но каждый в своей форме)
  • сделать кнопку отправки похожей на ссылку (с помощью css, я думаю, это не очень сложно. Вы можете видеть, что кнопка Bootstrap появилась как ссылка)

Не очень чистый или элегантный.

person Tun    schedule 08.06.2015
comment
Привет, @twnaing, спасибо за ответ. Я думаю, что проблема в том, что это может удалить любую фильтрацию из основного search_form_for. В итоге я стал еще грязнее, я покажу вам в ответ. - person bnussey; 08.06.2015
comment
Я неправильно понял необходимо сохранить. Извините, @bnussey, и спасибо за ответ. - person Tun; 09.06.2015
comment
Никаких проблем, надеюсь, это поможет вам. - person bnussey; 09.06.2015

Я достиг этого, создав скрытые поля для каждой области, а затем создав кнопку с помощью javascript onclick:

<%= f.hidden_field :upward_trending %>

<%= button_tag(:type => 'submit', :class => 'btn btn-primary scope-button upward_trending', :id => "upward_trending", :onclick => "document.getElementById('q_downward_trending').value = 0; document.getElementById('q_upward_trending').value = 1;") do %>
    <i class="fa fa-chevron-up fa-2x"></i><br>Upward<br>Trending
    <% end %>
person bnussey    schedule 08.06.2015