从模型中的method_missing访问会话的最佳方法

时间:2012-04-26 22:52:41

标签: ruby-on-rails ruby model-view-controller polymorphic-associations 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 个答案:

答案 0 :(得分:0)

我们遇到了类似的问题,我们在一个应用程序中处理多个mandant。在我们的例子中,上下文是强制性的,通过用户加载站点的顶级域来识别。

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

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

作为起点,看看sven fuchs的实现https://github.com/svenfuchs/i18n/blob/master/lib/i18n.rb