Я использую 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
Затем, когда я использую фильтр, я получаю результаты, показывающие, что фильтр все еще использует файл index.js,
Любая помощь будет принята с благодарностью.Спасибо всем.