Вы должны иметь в виду, что ваши маршруты ищутся сверху вниз. Итак, когда вы делаете это:
resources :tickets
post '/tickets/filter', to: 'tickets#filter_by', as: 'filter_by'
get '/tickets/filter', to: 'tickets#filter_by_sucursal', as: 'filter_by_sucursal'
Вы получаете:
tickets GET /tickets(.:format) tickets#index
POST /tickets(.:format) tickets#create
new_ticket GET /tickets/new(.:format) tickets#new
edit_ticket GET /tickets/:id/edit(.:format) tickets#edit
ticket GET /tickets/:id(.:format) tickets#show
PATCH /tickets/:id(.:format) tickets#update
PUT /tickets/:id(.:format) tickets#update
DELETE /tickets/:id(.:format) tickets#destroy
filter_by POST /tickets/filter(.:format) tickets#filter_by
filter_by_sucursal GET /tickets/filter(.:format) tickets#filter_by_sucursal
И, как видите, GET /tickets/:id
предшествует GET /tickets/filter
. Итак, все, что похоже на GET /tickets/...
, будет направлено на tickets#show
.
Ваш routes.rb
должен выглядеть так:
Rails.application.routes.draw do
resources :tickets do
collection do
post :filter, as: :filter_by
get :filter, as: :filter_by_sucursal
end
end
end
Это даст вам:
filter_by_tickets POST /tickets/filter(.:format) tickets#filter_by
filter_by_sucursal_tickets GET /tickets/filter(.:format) tickets#filter_by_sucursal
tickets GET /tickets(.:format) tickets#index
POST /tickets(.:format) tickets#create
new_ticket GET /tickets/new(.:format) tickets#new
edit_ticket GET /tickets/:id/edit(.:format) tickets#edit
ticket GET /tickets/:id(.:format) tickets#show
PATCH /tickets/:id(.:format) tickets#update
PUT /tickets/:id(.:format) tickets#update
DELETE /tickets/:id(.:format) tickets#destroy
В качестве альтернативы вы можете сделать:
resources :tickets do
collection do
post :filter, to: 'tickets#filter_by', as: :filter_by
end
member do
get :filter, to: 'tickets#filter_by_sucursal', as: :filter_by_sucursal
end
end
Что даст вам:
filter_by_tickets POST /tickets/filter(.:format) tickets#filter_by
filter_by_sucursal_ticket GET /tickets/:id/filter(.:format) tickets#filter_by_sucursal
tickets GET /tickets(.:format) tickets#index
POST /tickets(.:format) tickets#create
new_ticket GET /tickets/new(.:format) tickets#new
edit_ticket GET /tickets/:id/edit(.:format) tickets#edit
ticket GET /tickets/:id(.:format) tickets#show
PATCH /tickets/:id(.:format) tickets#update
PUT /tickets/:id(.:format) tickets#update
DELETE /tickets/:id(.:format) tickets#destroy
Тогда в вашем javascript вы можете сделать:
$(function () {
$('#sucursal').change(function () {
$.ajax({
url: "/tickets/#{$('#sucursal option:selected').text()}/filter",
type: "GET",
}).done(function (msg) {
console.log(msg)
}).fail(function (msg, txtStatus) {
console.log(msg);
});
});
});