Лучший способ получить доступ к сеансу из method_missing в модели

Я знаю, что модель не должна знать о данных сеанса, но мне нужно получить доступ к небольшому фрагменту информации о состоянии в method_missing, который определен в модели. Методы, перехваченные методом method_missing, вызываются помощниками формы, то есть:

client_medias/new.haml:
    f.text_field :new_display_name

client_media.rb:
    has_many :custom_properties, :as => :extensible

Здесь 'new_display_name' - это ключ пользовательского свойства, определенный посредством полиморфной ассоциации. Мне нужно знать контекст (в моем случае, предоставляемый методом current_app, доступным в контроллере), чтобы получить коллекцию отдельных ключей пользовательских свойств, которые я сопоставляю с определениями динамических методов в method_missing.

Есть идеи? Я посмотрел на Thread.current и склонен использовать его в данный момент.

1 ответ

Решение

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

наш подход состоит в том, чтобы использовать логику в I18n, чтобы обеспечить "синглтон", к которому мы можем получить доступ в каждой части нашего приложения, как это делается с I18n.locale который использует Thread.current тоже.

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

в качестве отправной точки взгляните на реализацию sven fuchs https://github.com/svenfuchs/i18n/blob/master/lib/i18n.rb