2

В this Railscast Райан Бэйтс упоминает, что это хорошая конвенция для использования слов, которые заканчиваются intion, -ment или -ship при назывании модели объединения. В чем преимущества этой конвенции?В чем преимущества соглашений об именах сообщества rails для обозначения модели объединения?

Например, что, если бы у меня были две модели под названием «Альбомы» и «Песни» соответственно, где песня могла появляться на многих альбомах, а в альбоме много песен? Что было бы хорошим именем для таблицы соединений, необходимой для этого? Tracklistingship? Треклисты?

+0

действительно ли песня действительно принадлежит более чем одному альбому? довольно уверен, что это будет компиляция или mixape. – AJcodez

+1

@AJcodez Да, данное событие записи может принадлежать нескольким альбомам (и некоторые люди явно относятся к таким вещам). В стороне, я не вижу существенной разницы между «альбомом» и «компиляцией», но если «*» *, кажется, что флаг/статус будет достаточным. –

+0

@DaveNewton interesting did not know – AJcodez

ответ

2

Соглашение должно называть его чем-то, что имеет смысл.

Эти отношения часто заканчиваются концами. Дело в том, чтобы следовать за соглашением a и быть последовательным, не обязательно, что все будет аккуратно входить в те же три окончания.

Для меня это звучит как Tracks, AlbumTracks и т.д. Если вы хотели следовать его идею составления слова, возможно, Trackation или Trackination (процесс сдачи треков на альбоме), Albumship (например, «членство», но с песнями альбома) и т.д.

Заметим также, что, надеюсь, у вас нет модели, называемые Albums и Songs, а Album и Song. ИМО самое ясное отношение - это просто AlbumSongs, потому что это именно то, что есть.

Вы можете пойти по другому маршруту и ​​назовите их Mixes.

+0

Спасибо Дэйв. «Треки» имеют для меня большой смысл, хотя «треки» - это действительно песни на альбоме, поэтому в этом смысле это немного запутанно. AlbumSongs мне нравится, но Райан Бейтс посоветовал против этой конвенции, потому что он сказал, что может быстро запутаться. Итак, в этом случае «Треклист» будет лучшим? Причина, по которой мне нужна таблица соединений, - мне нужно сохранить дополнительные данные о взаимосвязи между песнями и альбомами, например, порядок, в котором песня появляется на альбоме. В противном случае я бы просто использовал отношения has_and_belongs_to_many для обоих. –

+1

@LeeMcAlilly Я думаю, что TrackList в порядке, я бы назвал таблицу track_lists. Однако я не уверен, что AlbumSongs запутан. Я также не стал бы так сильно зависеть от этого, что прогресс остановится, либо маловероятно, что стоимость или возможность изменения будут проблемой развития стропила. –

+0

Я закончил тем, что начал «альбомную». Сначала я попробовал 'track_lists', но когда я начал настраивать отношения, было более концептуально сказать альбом' has_many: songs,: through =>: albumize', а также эту песню 'has_many: альбомы,: через => альбом '.Процесс поместить песню в альбом и поставить ее в позицию на этом альбоме - это действительно то, что делает эта модель объединения. Поэтому я считаю, что это слово имеет смысл. –

0

Еще одно преимущество использования согласованных соглашений об именах заключается в том, что есть довольно хороший шанс, что вы не будете единственным, кто работает над кодом. Используя согласованное соглашение об именах, другим, кто работает над вашим кодом, будет легче работать с кодом. Вам также может быть легче поддерживать, в том смысле, что вы можете не трогать код в течение 6 месяцев и в один прекрасный день вернуться к нему. Имея согласованное соглашение об именах, вы сможете понять, что делаете, не прочитав весь свой код.

+0

Спасибо Блейн. Это хороший обзор ценности соглашений об именах. Но я думаю, что важно держать их в перспективе и не использовать соглашение ради соблюдения конвенции, когда это не имеет смысла для вашей конкретной проблемы. –

Смежные вопросы