Convention de nommage des Rails pour la table de jointure
cette question découle de: comment lier la forme après la création de rails joindre la table
je crée la table de jointure entre mon produit et les Modèles de catégorie.
Comment doit être nommée la table de jointure? categories_products ou category_products ou autre chose?
4 réponses
categories_products
. Les deux pluriel. Dans l'ordre lexical.
Citation :
sauf si le nom de la table de jointure est explicitement spécifié en utilisant le : join_table option, Active Record crée le nom en utilisant le ordre lexical des noms de classe. Ainsi un joint entre le client et la commande les modèles donnent le nom par défaut de la table de jointure de " customers_orders" parce que" c "dépasse" o " dans l'ordre lexical.
Rails 4
faites attention que de Rails 4 Il ya quelques nouvelles règles.
spécifie une relation de plusieurs à plusieurs avec une autre classe. Cela associe deux classes via une table de jointure intermédiaire. À moins que la table join ne soit explicitement spécifiée en tant qu'option, elle est devinée en utilisant l'ordre lexical des noms de classe. Ainsi une jointure entre le développeur et le projet donnera le nom de la table de jointure par défaut de "developers_projects "parce que" D "précède" P " par ordre alphabétique.
noter que cette priorité est calculée en utilisant l'opérateur < pour Chaîne. Cela signifie que si les chaînes sont de longueurs différentes, et les chaînes sont égales lorsque comparé à la longueur la plus courte, puis la chaîne plus longue est considérée de priorité lexicale plus élevée que le plus court. Par exemple, on peut s'attendre à ce que les tables " paper_box" et les "papiers" pour générer un nom de table de jointure de "papers_paper_boxes" en raison de la longueur du nom "paper_box", mais il en fait génère un nom de table de jointure de "paper_boxes_papers". Soyez conscient de cela caveat, et utilisez l'option custom :join_table si vous en avez besoin.
si vos tables partagent un préfixe commun, il n'apparaîtra qu'une fois au début. Par exemple, les tableaux "catalog_categories" et "catalog_products" génère un nom de table de jointure de "catalog_categories_products".
# alphabetically order
developers + projects --> developers_projects
# precedence is calculated with '<', lengthier strings have precedence
# if the string are equal compared to the shortest length
paper_boxes + papers --> paper_boxes_papers
# common prefix omitted
catalog_categories + catalog_products --> catalog_categories_products
Rails 5
La règle sont encore quasiment la même. Avec Rails 5 nous avons un nouvel assistant pour créer des tables de jointure avec des migrations:
class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration[5.0]
def change
create_join_table :developers, :projects
end
end
tables de Jointure dans les Rails doivent être créés dans l'ordre alphabétique. Garder ce point à l'esprit chaque fois que vous créez une table de jointure.
par exemple, si vous voulez créer une table de jointure entre la table de projet et la table de collaborateur, vous devez la nommer comme ci-dessous.
syntaxe: first_table_name(UNDERSCORE)second_table_name
# Names must be in alphabetical order and also in plural
# Decide which is your first table name based on the alphabetical order
Exemple: la Création de la Table de Jointure entre le Projet Et Collaborateur
Collaborator-Project
collaborators_projects
# you should name it like this; In alphabetical order with plural names
Exemple 2: la Création de la Table de Jointure entre l'article sur le Blog de la table et de la Table Utilisateur
BlogPost-User
blog_posts_users # In alphabetical order with plural names
la nouvelle migration create_join_table crée une table join qui n'a pas de modèle correspondant, donc aucune convention de nommage n'est requise pour le nom du modèle.
pour accéder à la jointure, vous devez déclarer has_and_belongs_to_many sur les deux tables, et y accéder à travers l'association créée.