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.
↓
ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
[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.
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.
Pour faire de l'URL une colonne, il est nécessaire d'éliminer le même nom. Appliquez ensuite la validation.
app/models/user.rb
validates :name, uniqueness: true
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
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.
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