Вложенный запрос «get» под «get» с лямбдой в маршрутах Rails - PullRequest
0 голосов
/ 17 ноября 2018

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

get ':slug', :to => "countries#show", 
  :constraints => lambda { |r| 
                    Country.find_by_slug(r.params[:slug]).present? }, as: :country

Это делает URL вроде site.com/japan отлично.

Хотя структура выглядит не очень хорошо, яЯ использую его, потому что есть много устаревших маршрутов, которые открываются под корневым URL.

В любом случае,

Мне нужно вложить дополнительные ресурсы в города:

resources :places, only: :show

Чтобы включить URL-адреса, такие как: site.com/japan/tv-tower

Я пытался перейтис чем-то вроде:

constraints lambda { |request| 
  Country.find_by_slug(request.params[:slug]).present? } do
    resources places, only: :show
end

Но это не работает.

1 Ответ

0 голосов
/ 17 ноября 2018

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

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

resources :countries, only: [:show], path: '', :constraints => proc { |req| Country.find_by_slug(req.params[:country_id].nil? ? req.params[:id] : req.params[:country_id])  } do
  resources :places, path: ''
end

Это оставит вас с маршрутами, которые выглядят так:

       country_places GET    /:country_id(.:format)           places#index
                      POST   /:country_id(.:format)           places#create
    new_country_place GET    /:country_id/new(.:format)       places#new
   edit_country_place GET    /:country_id/:id/edit(.:format)  places#edit
        country_place GET    /:country_id/:id(.:format)       places#show
                      PATCH  /:country_id/:id(.:format)       places#update
                      PUT    /:country_id/:id(.:format)       places#update
                      DELETE /:country_id/:id(.:format)       places#destroy
              country GET    /:id(.:format)                   countries#show
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...