Лучший способ получить доступ к сеансу из 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