同一应用程序中每个域名的一个配置。如何轻松访问模型中的配置值?

时间:2010-06-01 08:48:09

标签: ruby-on-rails configuration config domain-name

我运行一个拥有多个域名的Ruby on Rails网站。我在数据库中有一个“网站”表,用于存储与每个域名相关的配置值:

  

网站
    - 域
    - 姓名
    - 标语
    - admin_email
    - 等等......

目前,我在ApplicationController中的每个请求开头(before_filter)加载网站对象:

  

@website = Website.find_by_domain(request.host)

问题是当我需要从模型的方法访问@website对象时。我想避免必须到处传递@website。最好的解决方案是使用类似于APP_CONFIG的东西,但每个域名。

  

def sample_model_property
   - “#{@website.name}是一个很棒的网站!”   结束

你会怎么做?

1 个答案:

答案 0 :(得分:0)

如果这是一个控制器实例变量,那么除了Controller和View域之外,你应该可以访问@website。如果你需要以相同的容量将某些东西推送到Model空间,你必须通过它,或者通过类似model_helper方法的东西来破解它。

您可能会做的是在您的网站类上使用一种单例方法,例如:

class Website < ActiveRecord::Base
  cattr_accessor :current_website
end

然后在控制器中你可以做以下事情:

before_filter :load_current_website

def load_current_website
  Website.current_website = Website.find_by_domain(request.host)
end

这样你可以在模型空间的任何地方引用Website.current_website,事情应该是同步的。请注意,这可能不是完全线程安全的,应该在使用之前在类似生产的环境中进行广泛测试。