[Ruby on Rails] Remplacez l'ID d'URL par le nom de la colonne

introduction

Dans Rails, lorsque vous utilisez la méthode resources dans routes.rb, le paramètre: id est généralement utilisé par défaut, Dans certains cas, vous souhaiterez peut-être modifier l'affichage. Cette fois, je décrirai comment changer l'id en colonne de nom.

Cible

スクリーンショット 2020-10-25 16.32.12.pngスクリーンショット 2020-10-25 16.31.38.png

Environnement de développement

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina

supposition

[Ruby on Rails] Comment se connecter avec uniquement votre nom et votre mot de passe en utilisant gem devise Nous modifierons l'URL en fonction de cela.

Préparation

Dans l'article prérequis, l'URL est mypage, donc Cette fois, j'oserai utiliser une URL avec un identifiant.

config/routes.rb


get 'mypage', to: 'homes#mypage'
↓
get 'mypage/:id', to: 'homes#mypage', as: 'mypage'

app/controllers/users/registrations_controller.rb


def after_sign_up_path_for(resource)
  mypage_path
end
↓
def after_sign_up_path_for(resource)
  mypage_path(@user)
end

app/controllers/users/sessions_controller.rb


def after_sign_in_path_for(resource)
  mypage_path
end
↓
def after_sign_in_path_for(resource)
  mypage_path(@user)
end

app/controllers/homes_controller.rb


def mypage
end
↓
def mypage
  @user = User.find(params[:id])
end

Vous avez maintenant une URL avec un identifiant.

Changer l'ID en colonne de nom

Éliminez les URL du même nom

Pour faire de l'URL une colonne, il est nécessaire d'éliminer le même nom. Appliquez ensuite la validation.

Validation du modèle

app/models/user.rb


validates :name, uniqueness: true

Validation DB

Terminal


$ rails g migration add_index_users_name

db/migrate/xxxxxxxxxxxxx_add_index_users_name.rb


class AddIndexUsersName < ActiveRecord::Migration
  def change
    add_index :users, :name, unique: true
  end
end

Terminal


$ rails db:migrate

En fait, changez l'identifiant en nom

Il est important de définir find sur find_by.

config/routes.rb


get 'mypage/:id', to: 'homes#mypage', as: 'mypage'
↓
get 'mypage/:name', to: 'homes#mypage', as: 'mypage'

app/controllers/homes_controller.rb


def mypage
  @user = User.find(params[:id])
end
↓
def mypage
  @user = User.find_by(name: params[:id])
end

De plus, pour spécifier la destination du lien par son nom Utilisez la méthode to_param,

app/models/user.rb


validates :name, uniqueness: true

#↓ Ajouter
def to_param
  name
end

Cela devrait être le même que votre objectif.

Lors de l'utilisation des ressources

Ce n'est pas grave si vous ajoutez les éléments suivants aux ressources.

resources :users, param: :name





 Désormais, la destination du lien doit également être affichée par nom.


# Résumé
 En en faisant une chaîne de caractères au lieu d'un nombre comme celui-ci,
 Il est facile de comprendre sur quelle page vous vous trouvez, ce qui la rend plus pratique.
 De plus, si vous utilisez un identifiant numérique dans un service tel que SNS,
 Ce n'est pas une méthode recommandée car vous saurez combien d'inscrits vous avez en ce moment.
 Dans ce cas, veuillez essayer cette méthode.

 De plus, sur Twitter, les technologies et les idées qui n'ont pas été téléchargées sur Qiita sont également téléchargées, donc
 Je vous serais reconnaissant si vous pouviez me suivre.
 Cliquez ici pour plus de détails https://twitter.com/japwork


Recommended Posts

[Ruby on Rails] Remplacez l'ID d'URL par le nom de la colonne
[Ruby on Rails] Comment changer le nom de la colonne
[Rails] Comment changer le nom de colonne de la table
[Ruby on Rails] De la construction de MySQL au changement de base de données
Comment utiliser Ruby on Rails
Déployer sur Ruby on Rails Elastic beanstalk (changement d'autorisation IAM)
[Ruby on Rails] Restrictions de colonne lors de l'enregistrement dans DB (4 représentants)
Comment changer le nom de l'application dans les rails
Déployer sur Heroku [Ruby on Rails] Débutant
Préparation à l'introduction de jQuery dans Ruby on Rails
[Ruby on Rails] Comment utiliser redirect_to
Bouton [Ruby on Rails] pour revenir en haut
Que faire lorsque l'hôte bloqué: "nom d'hôte" apparaît dans Ruby on Rails
Déployer sur Ruby on Rails Elastic beanstalk (déploiement EB)
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
[Ruby on Rails] Modifiez la date de mise à jour et la date de création selon votre notation préférée
[Introduction] Créer une application Ruby on Rails
Résumé des méthodes de mise à jour de plusieurs colonnes [Ruby on Rails]
[Ruby on Rails] Comment écrire enum en japonais
[Mis à jour de temps en temps] Ruby on Rails Méthode pratique
Déployer sur Ruby on Rails Elastic beanstalk (Construction de l'environnement)
[Ruby On Rails] Comment réinitialiser DB dans Heroku
(Ruby on Rails6) Comment créer un modèle et une table
Record d'apprentissage de Ruby on rails -2020.10.03
Création de portfolio Ruby on Rails
Record d'apprentissage Ruby on rails -2020.10.04
[Ruby on Rails] Debuck (binding.pry)
Record d'apprentissage de Ruby on rails -2020.10.05
Record d'apprentissage de Ruby on rails -2020.10.09
Record d'apprentissage Ruby on rails-2020.10.07 ②
[Rails] Ajouter une colonne à concevoir
Record d'apprentissage Ruby on rails-2020.10.07 ①
Annuler la migration de Ruby on Rails
Record d'apprentissage de Ruby on rails -2020.10.06
Résumé de la validation Ruby on Rails
Mémorandum de base Ruby on Rails
Comment changer dynamiquement le nom de la colonne acquis par MyBatis
[Ruby on Rails] Lorsque l'acquisition de l'identifiant du paramètre ne s'est pas bien déroulée
[Ruby on Rails] Ajouter une colonne avec des contraintes de clé externe
<Installation de points> Introduction à Ruby on Rails5 Comparaison du code source
[Ruby on Rails] Élimination de Fat Controller-First, logic to model-
(Ruby on Rails6) Affichage de la base de données qui a obtenu l'identifiant de la base de données
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Appliquer le CSS à une vue spécifique dans Ruby on Rails