[RUBY] Définir autre chose que l'ID pour le routage Rails

RailsでscaffoldするとURLの形式はexample.com/posts/:idになります。 Cependant, il peut arriver que vous ne souhaitiez pas utiliser id pour un paramètre. 今回はexample.com/posts/:uuidの様な形式でidの代わりにuuidを設定してみました。

Ajouter une colonne

Ajoutez une colonne uuid lors de la création de la table.

$ 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

Configurer le routage

config/routes.rb


resources :posts, param: :uuid

#Lors du réglage uniquement de l'écran de détail
# get '/posts/:uuid', to: 'posts#show'

définir uuid

Ajoutez un processus pour définir uuid avant d'enregistrer les données.

app/models/application_record.rb


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

  private

  #ajouter à
  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
  #ajouter à
  before_create :set_uuid
end

Contrôleur fixe

Si vous accédez à l'écran tel quel, une erreur se produira, alors réparez le contrôleur.

app/controllers/posts_controller.rb


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

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

Recommended Posts

Définir autre chose que l'ID pour le routage Rails
Définitions autres que les sept actions de base dans Rails
Rails / users /: id / to / {random_srting}: routage par défaut
À propos du routage des rails
Principes de base du routage des rails
[rails] Définir la validation
Résumé du routage Rails 6.0
Erreur de routage Catch Rails
[Rails] Concevoir un résumé de routage associé
[Rails] Configurer Twitter OGP
[Note] Confirmation de routage Rails3
[Rails] Paramètres d'acheminement complets
Utiliser la fonction de modèle de rails (ERB) autre que le contrôleur (vue Action)
Relation de vue du contrôleur de routage des rails
Comment écrire le routage Rails
Rails routage des ressources singulières par ressource