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?

38
demandé sur Community 2012-07-21 11:52:58

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.

45
répondu Zabba 2018-02-01 17:01:13

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

= > Docs for Rails v4.2.7

# 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

=> Bord de docs pour les Rails

39
répondu damoiser 2016-07-14 05:55:22

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
2
répondu Prabhakar 2015-06-04 06:09:53

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.

0
répondu Taylored Web Sites 2018-01-11 17:11:55