ruby on rails: как изменить адрес маршрутизации
Я новичок в рельсах, и я хотел бы знать, что если есть способ изменить название маршрутов. Я объясню предложение через минуту. У меня есть контроллер с именем users_controller, и ниже приведен код, который у меня есть в моем контроллере:
def create
if @user.save
redirect_to @user
end
И мой файл rout.rb, как показано ниже:
resources :users
get '/users/:id', to: 'users#show'
Теперь предположим, что у меня есть форма, и я заполняю ее правильно, тогда я буду перенаправлен на localhost:3000/users/id(id = some value)
что я делаю. Теперь я хочу, чтобы этот URL был похож localhost:3000/registered
, Вот когда я нажимаю кнопку отправки и, если все правильно, я хотел бы увидеть URL как localhost:3000/registered
что приводит меня к моему шоу-шоу или работает так же, как localhost:3000/users/id(id = some value)
, Я не хочу, чтобы идентификатор был виден.
Для этого я пытался get 'registered', to: 'users#show'
но все равно я вижу тот же URL, что и localhost:3000/users/id(id = some value)
, Пожалуйста, скажите мне, как это сделать.
А вот и мое шоу-действие
def show
@user = User.find(params[:id])
end
Я попробовал другой способ, сделав еще одно действие в том же контроллере. Я сделал действие index в моем users_controller и выполнил тогда, я получил Ошибка метода
3 ответа
Наконец, из обсуждений, которые у меня были, выяснилось, что нет способа скрыть ваш идентификатор, но мы можем изменить способ их отображения в браузере. Один из предложенных способов - создать хэш для идентификатора и использовать его для отображения элемента в действии show, или другой способ - перенаправить действие на некоторую статическую страницу.
Просто используйте вашу маршрутизацию как:
match "/registered", :to => "users#show", :as => :user_registered, via: :get
использовать этот путь, который вы будете использовать
redirect_to user_registered_path(id: user_id)
в вашем методе.
Вы должны изменить свой redirect_to
в вашем пользовательском контроллере create
а также update
действия.
class UsersController < ApplicationController
def create
# get user from params
if @user.save
redirect_to registered_path
else
render :new
end
end
def update
# get user from params
if @user.save
redirect_to registered_path
else
render :edit
end
end
end
РЕДАКТИРОВАТЬ: Как мы обсуждали в комментариях, вы не хотите использовать "users#show"
, поскольку зарегистрированная страница будет выглядеть одинаково для каждого пользователя. Вы можете сделать свой собственный зарегистрированный контроллер для этого.
rails g controller registered index