[RUBY] Association de modèles dans Rails

Aperçu

Je pense que l'association entre les modèles sera la base des bases de la création d'une application, je vais donc la résumer avec le sens de l'examen.

Qu'est-ce qu'une association

Les associations entre modèles sont des associations entre des tables de base de données utilisant des clés externes. Ce faisant, il est très pratique d'appeler les données nécessaires avec une simple description ou de supprimer les données associées en même temps lors de la suppression des données.

Association un-à-plusieurs

Un exemple typique d'association semble être une association un-à-plusieurs. L'association un-à-plusieurs signifie qu'un enregistrement dans une table est associé à plusieurs enregistrements dans une autre table. Exemple: associer le modèle User au modèle Post

app/models/user.rb


class User < ApplocationRecord
  has_many :posts
end

app/models/user.rb


class User < ApplocationRecord
  belongs_to :user
end

Utiliser la méthode has_many signifie «a beaucoup de», et utiliser la méthode appartient_to signifie «appartenir à», et les deux modèles sont liés. Dans le cas ci-dessus, cela signifie quelque chose comme "L'utilisateur a beaucoup de messages".

Ces méthodes ont une convention de dénomination: la méthode has_many utilise des pluriels pour les noms de modèle, et la méthode appartient_to utilise des noms de modèle singuliers. Spécifiez également le nom de colonne de la clé externe comme nom de modèle référencé (forme unique) + \ _id. (Exemple: user \ _id) Si vous souhaitez spécifier une clé externe, spécifiez la clé étrangère comme option.

app/models/user.rb


class User < ApplocationRecord
  has_many posts, foreign_key: "client_id"
end

Spécifiez l'option nom_classe pour modifier le nom de la méthode. Après has_many, remplacez-le par un nouveau nom de méthode et spécifiez le nom du modèle d'origine dans nom_classe.

app/models/user.rb


class User < ApplocationRecord
  has_many tweets, class_name: "Post"
end

Si vous spécifiez l'option dépendante pour has_many et indiquez: destroy, l'enregistrement de référence est automatiquement supprimé lorsque l'enregistrement référencé est supprimé.

app/models/user.rb


class User < ApplocationRecord
  has_many posts, dependent: :destroy

Ce que vous pouvez faire en associant

Lorsque le modèle est lié, les données source de référence peuvent être récupérées avec la description suivante.

example


@posts = @user.posts

Les méthodes qui peuvent être utilisées avec has_many peuvent utiliser des méthodes d'agrégation et des méthodes de requête.

example


@posts = @user.posts.count
@posts = @user.posts.order("")

Si vous souhaitez définir les données à associer à une référence, vous pouvez utiliser la méthode de génération pour l'associer. Vous pouvez également spécifier des attributs de modèle comme arguments.

example


@user.posts.build(name: "taro")

Si vous écrivez <<, vous pouvez même sauvegarder l'enregistrement.

example


@user.posts << @post

Sommaire

J'ai pu reconfirmer l'association entre les modèles, y compris la signification d'une critique. C'est toujours une partie de base, et il y a des associations un-à-un et plusieurs-à-plusieurs, alors j'aimerais le résumer à une autre occasion.

Recommended Posts

Association de modèles dans Rails
[Rails] Association de modèles (Association)
Group_by dans Rails
Ajout de colonnes dans les rails
Désactiver les turbolinks dans les rails
^, $ dans l'expression régulière Rails
Utiliser des images avec des rails
Comprendre la migration dans les rails
Association Ruby On Rails
Diviser routes.rb dans Rails6
Markdown implémenté dans Rails
Erreur de migration après l'association Activerecord dans l'environnement Rails5 + Docker
[Rails] Obtenir UserAgent sur le contrôleur
Implémenter la fonction d'application dans Rails
Transaction déclarative dans Rails #ginzarb
Japaneseize en utilisant i18n avec Rails
rails modèle g Débit global
Implémenter l'authentification LTI dans Rails
A propos de l'attribution d'un nom aux méthodes de modèle Rails
Gemme souvent utilisée dans les rails
Afficher le calendrier mensuel dans Rails
Utilisez plusieurs cases à cocher dans Rails6!
Rails: capturez les expressions régulières dans les e-mails!
[Rails] Paramètre de délai d'expiration de session dans l'appareil
Activer jQuery et Bootstrap dans Rails 6 (Rails 6)
[Rails] Erreur de validation inattendue dans l'appareil
À propos du symbole <%%> dans Rails erb
[Rails] Utiliser des cookies en mode API
Implémenter une fonction de connexion simple dans Rails
Créer une nouvelle application avec Rails
Ruby on Rails compatible japonais-anglais i18n
Modèles de rails et conventions de dénomination des tables
[Solution] Webpacker :: Manifest :: MissingEntryError dans les rails
Implémenter un formulaire de contact dans Rails
Supprimez les "actifs" et les "turbolinks" dans "Rails6".
Fonction CRUD et MVC dans Rails
Comment installer jQuery dans Rails 6
Comment renommer un modèle avec des contraintes de clé externes dans Rails
Ajout de la première fonction de pagination dans les rails
Les données ne sont pas enregistrées dans Rails.
[Rails 6] Personnaliser Bootstrap dans l'environnement Rails + Bootstrap 5.0.0-alpha
Implémenter la fonction de téléchargement CSV dans Rails
Remarques sur la génération de données factices pour les mots de passe dans le code de test unitaire du modèle Rails
Méthodes Ruby souvent utilisées dans Rails
Comment installer Swiper in Rails
Comment déboguer le traitement dans le modèle Ruby on Rails avec juste la console
Comment implémenter la fonctionnalité de recherche dans Rails
Définitions autres que les sept actions de base dans Rails
[Rails] Restrictions de fonction dans l'appareil (connexion / déconnexion)
Comment changer le nom de l'application dans les rails
[Rails] Code de test unitaire pour le modèle utilisateur