Проблема с процессами Ransack Rails из-за неправильного действия - PullRequest
0 голосов
/ 27 февраля 2019

Я использую Ransack в своем приложении Rails 5.2 для поиска с использованием фильтра.Он использует действие Index в контроллере и корректно отображает результаты, пока я не попытаюсь создать второй фильтр в другом действии в том же контроллере.Как только я использую фильтр в представлении нового действия, он показывает мне, что фильтр все еще обрабатывается с использованием исходного действия.

Я добавлю оригинальные и новые действия / виды ниже.Не могу сказать, что Ransack специально обрабатывает определенное действие.

Оригинальный рабочий код

События # Индекс

def index

    @category_list = Category.all.order("name ASC")

    # Get non expired events
    @events = Event.where("expiry > ?", Time.now)
    @events = @events.all
    @events = @events.paginate(:page => params[:page], :per_page => 12).order("created_at DESC")

    #ransack
    @search = @events.ransack(params[:q])
    @data = @search.result(:distinct => true)
    @events = @data.to_a

end

Представление индекса (только соответствующие биты)

    <%= search_form_for([:admin, @search], remote: true ) do |f| %>

     <div class="wrapper" id="event_listing">
     <%= render partial: "/admin/events/events-list", locals: {events: @events} %>
   </div>

Таким образом, страница индекса отображаетсяпартиал с результатами @ events

index.js.erb

$('#event_listing').html('<%= j render partial: "/admin/events/events-list", locals: {events: @events} %>');
$('.collapsible').collapsible();

Все работает нормально.

Теперь, если я добавлю новое действие с именем expired_events с кодом

def expired_events

    @category_list = Category.all.order("name ASC")

    # Get expired events
    @events = Event.where("expiry < ?", Time.now)
    @events = @events.all
    @events = @events.paginate(:page => params[:page], :per_page => 12).order("created_at DESC")

    #ransack
    @expired_search = @events.ransack(params[:q])
    @data = @expired_search.result(:distinct => true)
    @events = @data.to_a

end

У меня также будет мой маршрут для новых видов

rout.rb

resources :events do
    collection do
        get 'destroy_multiple_images'
        get 'destroy_single_image', action: "destroy_single_image"
        get 'expired_events'
    end
end

expired_events.html.erb

<%= search_form_for([:admin, @expired_search], remote: true ) do |f| %>

<div class="wrapper" id="event_listing">
   <%= render partial: "/admin/events/events-list", locals: {events: @events} %>
</div>

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

expired_events.js.erb

$('#event_listing').html('<%= j render partial: "/admin/events/events-list", locals: {events: @events} %>');
$('.collapsible').collapsible();

Теперь Rails показывает мне на сервере, что он все еще обрабатывает файл index.js.erb, когда я нажимаю кнопку фильтра на странице просмотра expired_events.Кто-нибудь знает, как конкретно сказать, чтобы сделать правильную форму поиска JS?

Я почти уверен, что переменные в представленных партиалах не имеют значения, как будто я могу заставить Ransack запускаться из правильной формы поиска, результаты должны меняться в зависимости от действия.

screesnhot, когда я нахожусь на странице expired_events enter image description here

Затем, когда я использую фильтр, я получаю результаты, показывающие, что фильтр все еще использует файл index.js,

enter image description here

Любая помощь будет принята с благодарностью.Спасибо всем.

1 Ответ

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

Понял.Благодарю.

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

<%= search_form_for([:admin, @expired_search], url: url_for(controller: 'events', action: 'expired_events'), remote: true ) do |f| %>
...