Допустимо ли намеренное исключение определения ассоциации с Rails ActiveRecord?

Во время работы над приложением Ruby on Rails мой коллега предложил мне намеренно опустить ассоциацию ActiveRecord, поскольку она определяет ненужные методы.

Пример,

class Person < ActiveRecord::Base
  has_many :pets
end

class Pet < ActiveRecord::Base
  # belongs_to :person <- Omit belongs_to association, for this is not used in anywhere.
end

Меня смущает этот совет, потому что предлагается полностью определить ассоциации моделей на большинстве ресурсов, описывающих ассоциацию ActiveRecord. Итак, я хотел бы спросить, действительна ли практика исключения таких ассоциаций.

«действительная практика»: Да, вы можете легко определить это, основываясь на том факте, что приложение и модели успешно функционируют без указания ассоциации. «лучшая практика»: высказывает свое мнение, но я думаю, что в большинстве случаев ответ — нет. Если я могу вызвать person.pets, то общее предположение состоит в том, что я также могу вызвать pet.person, и было бы удивительно узнать, что этот метод не существует; однако легко решаемая.

engineersmnky 25.07.2024 17:41

Спасибо за комментарий. Я думаю, что это верно, но не самое лучшее. Поэтому мне трудно иметь дело с такого рода советами.

monnet362 26.07.2024 01:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно Двунаправленные ассоциации из Rails Guide, если вы укажете отношение в обеих моделях:

Active Record попытается автоматически определить, что эти две модели имеют двунаправленную ассоциацию на основе имени ассоциации. Эта информация позволяет Active Record:

  • Предотвратите ненужные запросы к уже загруженным данным.
  • Предотвратите противоречивые данные.
  • Автосохранение ассоциаций в большем количестве случаев.
  • Подтвердите наличие и отсутствие ассоциаций в большем количестве случаев.

Поэтому это считается лучшей практикой. Также вы сможете использовать методы и опции, предоставленные belongs_to.

Однако не обязательно добавлять их оба: вы можете использовать одностороннее отношение, если оно соответствует вашим потребностям.

Другие вопросы по теме