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.
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.
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