Подтвердить что ты не робот

Соглашение об именах Rails для таблицы соединений

Эти вопросы связаны с: Как связать форму после создания таблицы соединений рельсов

Я создаю таблицу соединений между моими продуктами и категориями.

Как должна быть названа таблица соединений? category_products или category_products или что-то еще?

4b9b3361

Ответ 1

categories_products. Оба множественного числа. В лексическом порядке.

Цитата:

Если имя таблицы соединения не указано явно, используя: параметр join_table, Active Record создает имя, используя лексический порядок имен классов. Итак, соединение между клиентом и заказом модели дадут имя таблицы соединений по умолчанию "customers_orders" потому что "c" превосходит "o" в лексическом порядке.

Ответ 2

Рельсы 4

Обратите внимание, что из Rails 4 появляются новые правила.

Определяет отношения "многие-ко-многим" с другим классом. Это связывает два класса через промежуточную таблицу соединений. Если таблица соединений явно не указана в качестве опции, ее предполагается использовать с лексическим порядком имен классов. Таким образом, соединение между Developer и Project даст имя таблицы соединений по умолчанию для "developers_projects", потому что "D" предшествует "P" в алфавитном порядке.

Обратите внимание, что этот приоритет вычисляется с использованием < оператора для Строка. Это означает, что если строки имеют разную длину и строки равны при сравнении с кратчайшей длиной, тогда более длинная строка рассматривается с более высоким лексическим приоритетом, чем более короткий. Например, можно было бы ожидать, что таблицы "paper_boxes" и "документы" для создания имени таблицы объединений "papers_paper_boxes" из-за длины имени "paper_boxes", но это на самом деле генерирует имя таблицы соединений "paper_boxes_papers". Помните об этом предостережение и используйте параметр custom: join_table, если вам нужно.

Если ваши таблицы имеют общий префикс, он будет отображаться только один раз на начало. Например, таблицы "catalog_categories" и "catalog_products" генерирует имя таблицы соединений "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 

Рельсы 5

Правило по-прежнему остается одним и тем же. С Rails 5 у нас есть новый помощник для создания таблиц соединений с миграциями:

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

= > Edge docs для Rails

Ответ 3

Объединение таблиц в Rails должно создаваться только в алфавитном порядке. Помните об этом при каждом создании таблицы соединений.

Например, если вы хотите создать таблицу соединений между таблицей проекта и таблицей соавторов, вы должны называть ее, как показано ниже.

Синтаксис: 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

Пример: Создание таблицы объединения между Project и Collaborator

Collaborator-Project

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

Пример 2: Создание таблицы соединений между таблицей BlogPost и таблицей пользователей

BlogPost-User

blog_posts_users      # In alphabetical order with plural names