[RUBY] Stellen Sie eine andere ID als die für das Rails-Routing ein

RailsでscaffoldするとURLの形式はexample.com/posts/:idになります。 Es kann jedoch vorkommen, dass Sie die ID nicht für einen Parameter verwenden möchten. 今回はexample.com/posts/:uuidの様な形式でidの代わりにuuidを設定してみました。

Spalte hinzufügen

Fügen Sie beim Erstellen der Tabelle eine UUID-Spalte hinzu.

$ rails g scaffold post uuid:string body:text
class CreatePosts < ActiveRecord::Migration[6.0]
  def change
    create_table :posts do |t|
      t.string :uuid, null: false
      t.text :body

      t.timestamps
    end

    add_index :posts, :uuid
  end
end
$ rails db:migrate

Routing einrichten

config/routes.rb


resources :posts, param: :uuid

#Beim Einstellen nur des Detailbildschirms
# get '/posts/:uuid', to: 'posts#show'

UUID einstellen

Fügen Sie einen Prozess zum Festlegen der UUID hinzu, bevor Sie die Daten speichern.

app/models/application_record.rb


class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true

  private

  #hinzufügen
  def set_uuid
    if self.has_attribute?(:uuid) && self.uuid.blank?
      self.uuid = SecureRandom.hex(10)
    end
  end
end

app/models/post.rb


class Post < ApplicationRecord
  #hinzufügen
  before_create :set_uuid
end

Controller reparieren

Wenn Sie so wie es ist auf den Bildschirm zugreifen, tritt ein Fehler auf. Korrigieren Sie daher den Controller.

app/controllers/posts_controller.rb


def set_post
  @post = Post.find_by(uuid: params[:uuid])
end

これでexample.com/posts/:uuidの形式への設定ができました。

Recommended Posts

Stellen Sie eine andere ID als die für das Rails-Routing ein
Andere Definitionen als die sieben grundlegenden Aktionen in Rails
Rails / users /: id / to / {random_srting}: Standard-Routing
Informationen zum Rails-Routing
Grundlagen des Rails-Routings
[Schienen] Validierung einstellen
Rails 6.0-Routing-Zusammenfassung
Catch Rails Routing-Fehler
[Rails] Zusammenfassung der geroutenbezogenen Entwicklung
[Rails] Richten Sie Twitter OGP ein
[Hinweis] Bestätigung des Rails3-Routings
[Schienen] Vervollständigen Sie die Routing-Einstellungen
Verwenden Sie eine andere Rails-Vorlagenfunktion (ERB) als Controller (Aktionsansicht).
Beziehung zwischen Rails Routing Controller-Ansicht
Wie schreibe ich Rails Routing
Rails singuläres Ressourcenrouting nach Ressource