[RUBY] Rails / users /: id / to / {random_srting}: Standard-Routing

Was du machen willst

Ich werde es als Memorandum belassen

Setzen Sie: id in / users /: id / auf ein anderes Attribut als id

Verwenden Sie das Modell: to_param

Generieren Sie mit SecureRandom.urlsafe in url_token eine URL-sichere Zufallszeichenfolge Beispiel anstelle von id zu verwenden

Wenn Sie das aktuelle Datum und die aktuelle Uhrzeit + Zufallszahl codieren, kann die Möglichkeit einer Kollision verringert werden.

class Article < ApplicationRecord
  attribute :url_token, :string, default: -> { SecureRandom.urlsafe_base64(8) }
.
.
.
  def to_param
    url_token
  end
end

uuid ist wie folgt (Im Folgenden werde ich uuid übernehmen und eine Erklärung hinterlassen. Ich denke, dass dies nicht zum Zweck der Verkürzung der URL passt.)

class Article < ApplicationRecord
  attribute :uuid, :string, default: -> { SecureRandom.uuid }
.
.
.
  def to_param
    uuid
  end
end

Controller

Schreiben Sie danach den Teil mit params [: id] in der Steuerung in params [: uuid] um

Routing: param: :uuid

Rails.application.routes.draw do
  resources :users, param: :uuid
.
.
.
end

Fügen Sie einfach param :: uuid hinzu Dies ersetzt / users /: id durch / users /: uuid

Ich möchte / users /: uuid in /: uuid ändern

Routing: param: :uuid

Fügen Sie path: '/' hinzu

Rails.application.routes.draw do
  resources :users, param: :uuid, path: '/'
.
.
.
end

Wenn Sie das Routing zu diesem Zeitpunkt mit "Rails-Routen" überprüfen

       users GET    /                        users#index
             POST   /                        users#create
    new_user GET    /new(.:format)           users#new
   edit_user GET    /:uuid/edit(.:format)    users#edit
        user GET    /:uuid(.:format)         users#show
             PATCH  /:uuid(.:format)         users#update
             PUT    /:uuid(.:format)         users#update
             DELETE /:uuid(.:format)         users#destroy

users_path überschneidet sich mit root_path mit GET '/' und "POST /" wird auch zu "Routing-Fehler: Keine Route stimmt mit [POST]" / users "überein und funktioniert nicht

Aus vorläufigen Gründen haben wir uns daher entschlossen, nur andere Aktionen als index, new und create als root-basierte Pfade zu verwenden.

Die tatsächliche route.rb ist

Rails.application.routes.draw do
  resources :users, only: [:index, :new, :create]
  resources :users, param: :uuid, path: '/', only: [:show, :edit, :update, :destroy]
  .
  .
  .
end

Ich werde es vorerst mit nur hässlich versuchen

Referenz

Verwendung von /: Benutzername anstelle von / Benutzer /: ID auf Schienen · Yuichi Takada https://blog.takady.net/blog/2015/11/29/rails-routing-with-username-instead-of- Ich würde /

Recommended Posts

Rails / users /: id / to / {random_srting}: Standard-Routing
Wie schreibe ich Rails Routing
Stellen Sie eine andere ID als die für das Rails-Routing ein
[Rails] So konfigurieren Sie das Routing in Ressourcen
Informationen zum Rails-Routing
Grundlagen des Rails-Routings
Rails 6.0-Routing-Zusammenfassung
[Ruby on Rails] Ändern Sie die URL-ID in den Spaltennamen
Ich möchte Benutzer mit Devise + OmniAuth bei Rails authentifizieren
[Rails] Zusammenfassung der geroutenbezogenen Entwicklung
Einführung in Bootstrap in Rails 5
Bootstrap in Rails einführen !!
Einführung von Vue.js in Rails
So deinstallieren Sie Rails
[Hinweis] Bestätigung des Rails3-Routings
[Schienen] Vervollständigen Sie die Routing-Einstellungen