Я хочу иметь URL из пользователей через профиль в этом формате: mydomain.com/usernameРельсы пользовательский маршрут для профиля пользователя
я начал реализовать в модели пользователя:
user.rb
before_create :create_permalink
.
.
def to_param
permalink
end
.
.
private
def create_permalink
self.permalink = username.downcase
end
users_controller.rb
def show
@user = User.find_by_permalink(params[:permalink])
end
routes.rb
match "/:permalink", to: "users#show", via: 'get'
Когда я посещаю mydomain.com/username профиль пользователя делает дисплей, но когда я делаю это через user_path(current_user)
ссылку, я получаю эту ошибку
undefined method `username' for nil:NilClass
и URL является mydomain.com/user/ имя пользователя, которого я не хочу.
Как отредактировать маршрут рельсов по умолчанию и отредактировать маршрут пользователя в формате, который я хочу?
routes.rb:
Code::Application.routes.draw do
resources :users, except: [:edit, :show]
resources :sessions, only: [:new, :create, :destroy]
root 'pages#home'
match '/help', to: 'pages#help', via: 'get'
match '/about', to: 'pages#about', via: 'get'
match '/contact', to: 'pages#contact', via: 'get'
match '/signup', to: 'users#new', via: 'get'
match '/signin', to: 'sessions#new', via: 'get'
match '/signout', to: 'sessions#destroy', via: 'delete'
get '/:permalink', to: 'users#show', as: 'user'
get '/:permalink/edit', to: 'users#edit', as: 'edit_user'
end
После удаления только as: 'user'
линии и оставил as: 'edit_user'
я побежал bundle exec rake routes | grep -i "user"
:
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
user PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
signup GET /signup(.:format) users#new
GET /:permalink(.:format) users#show
edit_user GET /:permalink/edit(.:format) users#edit
Но делать это дает мне эту длинную ошибку: 'Invalid название маршрута, уже в use: 'user' Вы, возможно, определили два маршрута с тем же именем, используя опцию ': as', или вы можете переопределить маршрут, уже определенный ресурсом с тем же наименованием.Для последнего вы можете ограничить маршруты, созданные с помощью «ресурсов», как описано здесь: http: // guide.rubyonrails.org/routing.html # restricting-the-routes-created' – Tim
Я также добавил 'resources: users, кроме: [: show,: edit] ', но он по-прежнему не работает. – Tim
do "bundle exec rake routes" перед добавлением опций as: options и посмотреть, какое действие создает «пользовательский» маршрут, и добавьте это действие в исключение вместо: show, может быть, это что-то еще – arieljuod