Как связать модели потомков с родителями - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть следующие модели:

Account
  has_many :libraries

Library
  has_many :topics
  belongs_to :account

Topic
  has_many :functions
  belongs_to :library

Function
  has_one :example
  belongs_to :topic

Example
  belongs_to :function

Я бы хотел иметь возможность делать такие вещи, как:

some_account.libraries
some_account.topics
some_account.functions
some_account.examples

Кроме того, я хотел бы иметь возможность назначить учетную запись потомку, т.е.

some_example.account = some_account
some_function.account = some_account
some_topic.account = some_account
some_library.account = some_account

Чтобы дать некоторый контекст: Я разрешаю пользователю (учетной записи) создавать каждую библиотеку, тему, функцию, пример. запись отдельно. Затем пользователь может изменить способ связывания записей: изменить тему функции, переместить тему в другую библиотеку, добавить пример для функции и т. Д.

Насколько я понимаю, независимо от того, какая запись создается, мне нужно было бы назначить ее пользователю (учетной записи), чтобы у меня был список каждой записи модели, созданной пользователем, а также чтобы другие пользователи не видели вещи, которые им не принадлежат

Хотя я могу быть слишком сложным, я действительно не знаю: (

Заранее спасибо.

1 Ответ

1 голос
/ 17 декабря 2010

Просто поставь

belongs_to :account

для каждой сущности, которую пользователь может создать ... и добавить внешний ключ, и

Account
  has_many :libraries
  has_many :topics
  has_many :functions
  has_many :examples

(Примечание: я использую гем hobo_fields, чтобы облегчить миграцию)

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

Если вы хотите убедиться, что пользователи не могут добавлять свои темы в чужую библиотеку, просто добавьте проверку в запись, чтобы предотвратить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...