Пользовательская маршрутизация в Rails 5 - PullRequest
0 голосов
/ 05 марта 2019

У меня проблемы с пользовательской маршрутизацией.Я хочу удалить модель из маршрута и динамически использовать имя записи.

, поэтому вместо:

site.com/events/my-event

мне бы хотелось, чтобы оно было:

site.com/my-event

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

  get('/:id', to: redirect do |params, request|
   id = request.path.gsub("/", "")
   "/events/#{id}"
  end)

Я знаю, что это перенаправление не правильно, я просто не очень разбираюсь в вариантах маршрутизации.Как это сделать правильно?

rout.rb

Rails.application.routes.draw do

  resources :events, param: :id, path: "" do
    get 'login', to: 'sessions#new', as: :login
    get 'logout', to: 'sessions#destroy', as: :logout
    post 'sessions', to: 'sessions#create', as: :session_create
  end

  namespace 'admin' do
    root "events#index"

    resources :sessions, only: [:create]
    get 'login', to: 'sessions#new', as: :login
    get 'logout', to: 'sessions#destroy', as: :logout

    resources :events
  end

end

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Вам не нужно перенаправлять.Вам нужно сопоставить все запросы одному контроллеру / действию.

get '/(*all)', to: 'home#app'

Внутри этого действия проверьте, что входит в параметры, и отобразите соответствующий вид.

PS: он будет захватывать все запросы, дажедля не найденных изображений, js и т. д.

0 голосов
/ 05 марта 2019

(1) Чтобы исправить /admin, чтобы перейти на правильный путь, переместите namespace строку над ресурсами событий так, чтобы оно соответствовало первому:

Рельсовые маршруты сопоставляются в указанном порядке 2.2 CRUD, глаголы и действия

# routes.rb
namespace :admin do
  root "events#index"
  #...
  resources :events
end

resources :events, param: :name, path: ""

Используйте :param и :path, чтобы сопоставить site.com/myeventиз site.com/events/:id

Ваш events контроллер:

# events_controller.rb
class EventsController < ApplicationController
  # ... 

 private

   def set_event
     @event = Event.find_by(name: params[:name])
   end
end

Ваш admin events контроллер:

# admin/events_controller.rb
class Admin::EventsController < ApplicationController
  # ...

  private     
    def set_event
      @event = Event.find params[:id]
    end
end

СОВЕТ: Получить полный список доступныхмаршруты используют rails routes в вашем терминале 5.1 Перечисление существующих маршрутов

0 голосов
/ 05 марта 2019

Rails позволяет вам указать, как должен выглядеть URL маршрутизации:

https://guides.rubyonrails.org/routing.html#translated-paths

...