Изменить маршруты в существующем приложении Rails - PullRequest
0 голосов
/ 27 января 2020

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

Пример существующего маршрута: http://localhost:3000/search_adv?locale=de&q[home_type_eq]=1

Кому: http://localhost:3000/bowling?locale=de Как создать эти маршруты без «большого» изменения кода?

Где параметр home_type = 1 соответствует боулингу. home_type = 2 в ресторан и так далее. Всего шесть таких параметров.

В маршрутах.rb: get 'search_adv' => 'pages#search_adv' В контроллере:

  def search_adv
    if params[:search_adv].present? && params[:search_adv].strip != ""
      session[:loc_search] = params[:search_adv]
    end

    if session[:loc_search] && session[:loc_search] != ""
      @rooms_address = Room.where(active: true).paginate(page: params[:page], per_page: 10).near(session[:loc_search], 1000, order: 'distance')
    else
      @rooms_address = Room.where(active: true).paginate(page: params[:page], per_page: 10)
    end

1 Ответ

1 голос
/ 29 января 2020

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

Вы можете добавить M, V и C каждый для home_types (restaurant, bowling et c.), а затем перенаправить из метода search_adv в этот маршрут контроллера на основе params.

Например:

Вы нажимаете http://localhost:3000/search_adv?locale=de&q[home_type_eq]=1, а затем в search_adv вы можете

  if params[the exact params containing your value] == 1
    redirect_to bowlings_path(locale: 'de')
  end

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

  http://localhost:3000/bowlings?locale=de
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...