自定义路由遇到一些问题。我要做的是从路由中删除模型,并动态使用记录名称。
所以而不是:
site.com/events/my-event
我希望是这样
site.com/my-event
我修改了此代码以使其与下面的代码一起使用,唯一的问题是我无法访问我的管理名称空间,因为它被视为事件记录(和任何其他路由):
get('/:id', to: redirect do |params, request|
id = request.path.gsub("/", "")
"/events/#{id}"
end)
我知道这种重定向是不正确的,我只是不太了解路由选项。该如何正确完成?
routes.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
答案 0 :(得分:0)
通过“路线”可以指定路由URL的外观:
https://guides.rubyonrails.org/routing.html#translated-paths
答案 1 :(得分:0)
您不需要重定向。 您需要将所有请求与一个控制器/动作匹配。
get '/(*all)', to: 'home#app'
在此操作中,检查params中将要出现的内容并呈现适当的视图。
PS:它将捕获所有请求,即使是未找到的图像,js等。
答案 2 :(得分:0)
(1)要固定/admin
到正确的路径,请将namespace
行移到事件资源的上方,以便首先匹配:
匹配路由
# 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
提示:要获取可用路由的完整列表,请在终端机5.1 Listing Existing Routes中使用rails routes