маршрут рельсов: одинаковый шаблон URL с другим параметром - PullRequest
0 голосов
/ 27 мая 2020

Маршруты:

get 'home/index' => "home#index" 
namespace :lawyers do                                                                                   
   get 'all/:division/:district' => "profiles#index", as: :division_district_all
   get 'all/:speciality/:sub_speciality' => "profiles#index", as: :speciality_subspeciality_all
 end

Домашний контроллер # Просмотр индекса:

<% @districts.each do |district| %>
      <%= link_to district.name, lawyers_division_district_all_path(district.division.name.parameterize,district.slug) %>
<% end %>

<% @sub_specialities.each do |sub_speciality| %>
      <%= link_to sub_speciality.name,lawyers_speciality_subspeciality_all_path(sub_speciality.speciality.name.parameterize,sub_speciality.name.parameterize)%>
 <% end %>

Профиль Контроллера # индекс:

raise params.inspect

Каждый раз, когда я выбираю speciality и sub_speciality, но это показывает значение подразделения и района в params. Это конфликтует, потому что шаблон похож. Как мне от этого избавиться?

1 Ответ

1 голос
/ 27 мая 2020

Вам нужно будет разделить метод назначения на контроллере и обновить маршруты.

Я бы рекомендовал этот подход:

namespace :lawyers do                                                                                   
   get 'division/:division/:district' => "profiles#division", as: :division_district_all
   get 'speciality/:speciality/:sub_speciality' => "profiles#speciality", as: :speciality_subspeciality_all
 end

Обновление : Основываясь на строгих требованиях, вы можете использовать параметры запроса all/:division/:district?query_by=divison, вам понадобится только один маршрут.

get 'all/:primary/:secondary' => "profiles#index", as: :lawyers_all

А затем в контроллере управляйте logi c с чем-то вроде

def index
  case params[:query_by]
  when 'division'
    # Division logic here
  when 'speciality'
    # speciality logic here
  else
    # Error handling here
  end
end

Обновление 2 : Как вы упомянули в комментариях, URL-адрес не может измениться. Тем не менее, вам понадобится только один маршрут

get 'all/:primary/:secondary' => "profiles#index", as: :lawyers_all

И проверьте наличие в db на основе параметров, это повлияет на производительность вашего приложения, создав много запросов db, а также создаст потенциальную проблему сопоставления с неверными классами.

def index
  if Division.find_by(name: params[:primary]).present?
    # Division logic here
  elsif Speciality.find_by(name: params[:primary].present?
    # speciality logic here
  else
    # Error handling here
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...