Где настроить отношения внешнего ключа в приложении rails с помощью has_many через

Я устанавливаю простую связь has_many через отношения. Мне было интересно, есть ли какие-либо передовые методы, которые я должен учитывать при настройке отношений внешнего ключа.

Приложение предназначено для того, чтобы пользователи могли создавать элементы и объявления, где модель списка используется для соединения элементов с рекламой (модель списка также имеет временные метки и поле заказа).

Главный вопрос у меня такой: какие модели должны принадлежать пользовательской модели? Я думал, что самое простое решение — это иметь список own_to user. Таким образом, я могу использовать сквозное отношение has_many, чтобы выяснить, какие элементы и какие объявления принадлежат каждому пользователю.

Однако мне пришло в голову, что это может оставить некоторые пробелы в зависимости от того, какие рабочие процессы я хочу сделать возможными. Например, что, если пользователь хочет создать несколько элементов, прежде чем создавать объявление, в котором есть эти элементы? Что, если пользователь создаст объявление до того, как создаст какие-либо элементы?

Основываясь на вышеизложенном, я подумал, что, возможно, мне следует просто сделать рекламу и элементы принадлежащими пользователю. Если я это сделаю, есть ли какая-то очевидная причина также сделать список принадлежащим пользователю? Я собирался это сделать, но почему-то мне это показалось излишним.

Это кажется довольно типичной ситуацией, с которой можно столкнуться в приложении для рельсов, поэтому я надеялся, что кто-то с опытом был здесь и мог бы поделиться некоторыми соображениями.

Спасибо!


person eksatx    schedule 11.01.2011    source источник


Ответы (1)


Я пытаюсь понять, что у вас есть:

Список элементов рекламы пользователя

Где Listing представляется какой-то моделью соединения, которая связывает Item с нахождением в Ad.

Я не вижу большого количества неправильного способа сделать это. Я полагаю, что наиболее нормальным способом сделать это было бы просто иметь элемент belong_to пользователя и получать списки и рекламу через него. Но и здесь вам придется заплатить цену, поскольку вам придется писать надоедливый код и выполнять несколько объединений, чтобы получить свою рекламу.

Противоположная крайность — просто иметь все belong_to для пользователя. У вас есть дополнительный столбец в 2 ваших моделях, но тогда у вас также гораздо более простые отношения. Вам также не придется беспокоиться о том, какие рабочие процессы разрешены вашим пользователям при разработке схемы.

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

person Karl    schedule 11.01.2011