0

我被要求从我们的 Rails 应用程序中的许多 ActiveResource 子类中构建一个 gem。

困难在于self.site调用使用 Rails 环境文件中的常量集(以便开发、测试和生产指向不同的网站)。将我的新 gem 添加到 Gemfile 后,我发现应用程序在环境文件之前加载 gem ,因此我的 ActiveResource 模型破坏了应用程序。

我应该怎么办?

规格:Rails 3.2.3,Ruby 1.9.3

4

1 回答 1

0

我最终做的是覆盖self.siteand self.formatself.connection让他们只在第一次调用方法时寻找环境常量:

module MyActiveResource

    # A flag to indicate whether the environment variable has already been sought
    attr_accessor :active_record_fields_set

    # Set site & format if not set
    def connection(refresh=false)
        set_my_active_record_fields unless active_record_fields_set
        super(refresh)
    end

    # Set site & format if not set
    def site
        set_my_active_record_fields unless active_record_fields_set
        super
    end

    # Set site & format if not set
    def format
        set_my_active_record_fields unless active_record_fields_set
        super
    end

    # Set site & format
    def set_my_active_record_fields
        self.active_record_fields_set = true
        self.site = MY_CONSTANT
        self.format = ActiveResource::Formats::XmlFormat
    end

end

然后MyActiveResource在我的从ActiveResource::Base.

于 2012-07-23T21:07:06.993 回答