Convenzione di denominazione delle barre per la tabella di join

Questa domanda deriva da: Come colbind il modulo dopo aver creato la tabella di join dei binari

Sto creando la tabella di join tra i miei modelli di prodotto e di categoria.

Quale deve essere il nome della tabella di join? categories_products o category_products o qualcos’altro?

categories_products . Entrambi al plurale. In ordine lessicale.

Citazione :

A meno che il nome della tabella di join non venga esplicitamente specificato utilizzando l’opzione: join_table, Active Record crea il nome utilizzando l’ordine lessicale dei nomi di class. Quindi un join tra cliente e modelli di ordine fornirà il nome predefinito della tabella di join di “customers_orders” perché “c” supera la “o” nell’ordinamento lessicale.

Rotaie 4

Presta attenzione che da Rails 4 ci sono alcune nuove regole.

Specifica una relazione molti-a-molti con un’altra class. Questo associa due classi tramite una tabella di join intermedia. A meno che la tabella di join non sia esplicitamente specificata come un’opzione, si indovina l’utilizzo dell’ordine lessicale dei nomi di class. Quindi un join tra Developer e Project fornirà il nome predefinito della tabella di join di “developers_projects” perché “D” precede “P” in ordine alfabetico.

Si noti che questa precedenza viene calcasting utilizzando l’operatore

Se le tue tabelle condividono un prefisso comune, apparirà solo una volta all’inizio. Ad esempio, le tabelle “catalog_categories” e “catalog_products” generano un nome tabella join di “catalog_categories_products”.

=> Documenti per 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 regola è ancora più o meno la stessa. Con Rails 5 abbiamo un nuovo helper per creare tabelle di join con le migrazioni:

 class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration[5.0] def change create_join_table :developers, :projects end end 

=> Documenti Edge per Rails

Le tabelle di join in Rails devono essere create solo in ordine alfabetico. Tieni presente questo punto ogni volta che crei una tabella di join.

Ad esempio, se si desidera creare una tabella di join tra la tabella del progetto e la tabella del collaboratore, è necessario denominarla come di seguito.

Sintassi: 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 

Esempio: creazione della tabella di join tra Project And Collaborator

 Collaborator-Project collaborators_projects # you should name it like this; In alphabetical order with plural names 

Esempio 2: creazione della tabella di join tra la tabella BlogPost e la tabella utenti

 BlogPost-User blog_posts_users # In alphabetical order with plural names 

La nuova migrazione create_join_table crea una tabella di join che non ha un modello corrispondente, quindi non è richiesta alcuna convenzione di denominazione per il nome del modello.

Per accedere al join, è necessario dichiarare has_and_belongs_to_many sulle due tabelle e accedervi tramite l’associazione creata.