[RUBY] Introduction et précautions de Gem Friendly Id

À propos de Gem Friendly Id

Il existe un Guide FriendlyId, je vais donc traduire un extrait partiel.

FriendlyId est un module complémentaire Ruby Active Record qui vous permet de remplacer l'identifiant d'une URL par une chaîne.

** Si vous n'utilisez pas FriendlyId ** http://example.com/states/4323454 with FriendlyId http://example.com/states/washington Créez une partie de l'URL qui identifie la page à l'aide de mots-clés lisibles par l'homme. Cela rend l'application plus conviviale pour les utilisateurs et les moteurs de recherche.

Vous pouvez voir que l'origine du nom de gemme FriendlyId vient d'ici.

Exemple d'implémentation

Notre service Carely utilise en fait friendly_id, je voudrais donc le présenter.

class Customer < ApplicationRecord
  include FriendlyId ---- ①

  friendly_id :uuid, use: :finders ---- ②

(1) Pour utiliser FriendlyId dans model, vous devez d'abord inclure le module FriendlyId.

(2) Ceci est une description qui vous permet d'utiliser la méthode find de l'enregistrement actif avec uuid.

customer: {
  id: 10,
  uuid: "28d0d2b8-3f2c-49d0-bf11-3b01ec164311"
  firstName: "hogehoge",
  lastName: "fugafuga", 
  mailAddress: "[email protected]",
  age": "30"
・
・
・
}

Supposons que vous ayez des données csutomer comme celle ci-dessus.

À l'origine, find ne prend en charge que la clé primaire (id) customer = Customer.find(10) Il sera décrit comme friendly_id :uuid, use: :finders En écrivant customer = Customer.find("28d0d2b8-3f2c-49d0-bf11-3b01ec164311") Vous pouvez également utiliser la méthode find avec et uuid. Aussi, lors de l'affichage des informations du client correspondant pour l'URL http://example.com/customer/10 C'était, mais en utilisant FriendlyId http://example.com/customer/28d0d2b8-3f2c-49d0-bf11-3b01ec164311 Ce sera. Les avantages de l'utilisation de FriendlyId sont décrits dans le guide FriendlyId. ** Si vous n'utilisez pas FriendlyId ** http://example.com/states/4323454 with FriendlyId http://example.com/states/washington Il y a un point qu'il est facile d'identifier en incluant le nom dans l'URL, mais en utilisant uuid comme notre société, il devient impossible de deviner de quelle donnée numérique il s'agit, et il est également impossible de deviner la taille de la table. Il y a aussi.

Vous pouvez également formater l'URL à l'aide d'une fonctionnalité appelée slugged. Dans l'exemple décrit dans le guide FriendlyId, si vous mettez une chaîne de caractères avec un espace dans le titre comme indiqué ci-dessous, l'URL doit être comme / posts / this% 20is% 20the% 20first% 20post. Cependant, l'utilisation de Slugged facilite la lecture en tant que / posts / this-is-the-first-post.

# a migration
class CreatePosts < ActiveRecord::Migration
  def self.up
    create_table :posts do |t|
      t.string :title, :null => false
      t.string :slug, :null => false
      t.text :body
    end

    add_index :posts, :slug, :unique => true
  end

  def self.down
    drop_table :posts
  end
end

# model
class Post < ActiveRecord::Base
  extend FriendlyId
  friendly_id :title, :use => :slugged
end
#Slugged facilite la vue et la forme
@post = Post.create(:title => "This is the first post!)
@post.friendly_id # "this-is-the-first-post "Retour.
redirect_to @post #L'URL est/posts/this-is-the-first-Ce sera post.

point important

Jugons si FriendlyId est utilisé ou non dans le modèle en examinant correctement la description. C'est une histoire que si vous l'utilisez avec le préjugé que vous allez l'utiliser dans ce modèle parce que vous utilisez FriendlyId dans la plupart des modèles, ce sera ???.

Par exemple, dans le modèle appelé société, il existe une colonne appelée uuid, mais elle n'est pas utilisée comme FriendlyId. company = Company.find("16d28548-2e57-4e67-a041-1f05acfdabba") Si vous écrivez comme company = Company.find(16) Le résultat de s'affiche. Il semble que cela soit dû au fait que lorsque la méthode find passe une chaîne de caractères comme argument, elle est convertie en un entier avec .to_i. Si j'obtiens une erreur, je sais que je n'utilise pas FriendlyId. Puisque les données ont été renvoyées, ce serait différent pendant un moment si les données de ʻuuid = "16d28548-2e57-4e67-a041-1f05acfdabba" `étaient normalement obtenues.

Recommended Posts

Introduction et précautions de Gem Friendly Id
Introduction de Docker Hub et des commandes Auto-apprentissage ①
Introduction et explication de l'utilisation de Font Awesome
Introduction de pay.jp
Introduction de milkode
Introduction de Rspec et de la localisation japonaise des messages d'erreur
Rubis et gemme
Attribution automatique des attributs name et id par form_with
Introduction de Docker - Partie 1--
[Rails] Présentation de PAY.JP
Introduction de l'authentification des utilisateurs