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