Как использовать around_filter для охвата всех запросов в Rails? - PullRequest
0 голосов
/ 14 января 2012

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

Трудный путь решения моей проблемы
Iможет пройти вручную и изменить вызов, как @people = Person.all на @people = current_user.people, но хромает!В основной ветке продолжается разработка, и я не хочу нянчиться с каждым запросом при слиянии с демо-веткой.

Что я хотел бы сделать вместо
Я бы хотел создать в своем application_controller вокруг_фильтр, который будет захватывать мои запросы и добавлять в этот дополнительный уровень области видимости примерно так:

around_filter :scope_on_current_user

def scope_on_current_user(&block)
  MagicalClass.scope_on_user(current_user, &bock)
end

Это идея, которую я получил от осьминога , который является драгоценным камнем базы данных.Я посмотрел вокруг в их исходном коде, и это выглядит довольно волосатым.Они в значительной степени заходят в ActiveRecord, угоняют соединение с БД и т. Д. Я надеюсь, что это излишне для того, что я хочу.Любой совет о том, как MagicalClass может работать?:)

Rails 3.1.0
ActiveRecord 3.1.0

1 Ответ

0 голосов
/ 14 января 2012

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

Это в сочетании с Thread.current может будет достаточно, чтобы вы начали.

Тем не менее ... может быть, имеет смысл использовать мультитенантный подход с отдельными БД?

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