Ruby on rails 从模型中缺少的方法_访问会话的最佳方法

Ruby on rails 从模型中缺少的方法_访问会话的最佳方法,ruby-on-rails,ruby,model-view-controller,polymorphic-associations,method-missing,Ruby On Rails,Ruby,Model View Controller,Polymorphic Associations,Method Missing,我知道模型不应该知道会话数据,但我需要访问模型上定义的方法_missing中的少量状态信息。由缺少的方法捕获的方法由表单帮助程序调用,即: client_medias/new.haml: f.text_field :new_display_name client_media.rb: has_many :custom_properties, :as => :extensible 这里的“new_display_name”是通过多态关联定义的自定义属性键。我需要知道上下文(

我知道模型不应该知道会话数据,但我需要访问模型上定义的方法_missing中的少量状态信息。由缺少的方法捕获的方法由表单帮助程序调用,即:

client_medias/new.haml:
    f.text_field :new_display_name

client_media.rb:
    has_many :custom_properties, :as => :extensible
这里的“new_display_name”是通过多态关联定义的自定义属性键。我需要知道上下文(在我的例子中,由控制器中可访问的当前_app方法提供),以获取不同的自定义属性键集合,我正在映射到方法_missing中的动态方法定义


有什么想法吗?我研究了Thread.current,现在倾向于使用它。

我们有一个类似的问题,我们在一个应用程序中处理多个mandant。在我们的例子中,上下文是mandant,通过用户从中加载站点的顶级域进行标识

我们的方法是使用I18n中的逻辑来提供一个“单例”,我们可以在应用程序的每个部分中访问它,就像使用
I18n.locale
Thread.current
一样

然后,我们在应用程序控制器中将单例设置为before过滤器,以便应用程序的每个其他部分都可以在相同的响应中使用它


作为一个起点,看看sven fuchs的实现

这个网站上有很多讨论这个问题的帖子,大多数人甚至会因为你考虑过这个问题而责骂你。有一个例子详细解释了如何使模型可以使用任何东西,但请注意,该语言很粗糙,您觉得它是一个真正的工具。但这是可以做到的,这只是一种坏习惯。搜索“会话模型rails”我在这里和更广泛的互联网上都做过研究。我意识到这是一个坏主意,但将app_id从控制器直接传递给模型中缺少的方法_的唯一方法(我能想到的)是传递给monkeypatch text_field helper,这本身可能是一个坏主意。如果有人能想出更好的主意,我很乐意使用它。或者告诉我哪一个是较小的邪恶(monkeypatching helper或使用Thread.current)?我基于我们的方法创建了一个称为白标签的小宝石: