Могу ли я перечислить все зависимые объекты объекта (скажем, пользователя)? - PullRequest
2 голосов
/ 09 мая 2019

У меня есть модель, и я могу вручную проверить каждую (:has_many, :has_one) зависимость, но я хочу немного магии, например current_user.attributes для записей.Поэтому, когда я обновляю модель, мне не нужно обновлять метод.

Я пытался Reflections , но он возвращает все теоретические зависимости / связи модели, не так ли?И мне нужны зависимые записи из БД.

Что-то вроде X.where(user_id: @user.id) или @user.dependents

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Вы можете присвоить необходимый объект model, а затем

model.class.reflect_on_all_associations.map { |table| model.method(table.name).call }.select(&:any?)

Например:

user = User.first
user.class.reflect_on_all_associations.map { |table| user.method(table.name).call }.select(&:any?)
# returns all associated objects of first user

Вы можете указать результат, используя :has_many, :has_one или :belongs_to в качестве аргумента reflect_on_all_associations.

Возможно, есть более элегантный способ, но он работает.

1 голос
/ 09 мая 2019

TL; DR Не делайте этого:)

Вы можете сделать нечто очень похожее, используя отражения.Например,

@user.class.reflections.keys.flat_map { |reflection| me.send(reflection) }

даст вам массив со всеми объектами, связанными с пользователем.Но что дальше?

Для почти любой реальной логики вокруг членов этого списка (кроме основ AR :: Base) вам нужно будет проверить любой класс объектаили используйте склонную к ошибкам try магию - оба варианта иногда являются разумным компромиссом, но в большинстве практических случаев я бы предпочел менее вонючие решения (даже если они немного более многословны).

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