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
Другие вопросы по тегам