我被要求从我们的 Rails 应用程序中的许多 ActiveResource 子类中构建一个 gem。
困难在于self.site
调用使用 Rails 环境文件中的常量集(以便开发、测试和生产指向不同的网站)。将我的新 gem 添加到 Gemfile 后,我发现应用程序在环境文件之前加载 gem ,因此我的 ActiveResource 模型破坏了应用程序。
我应该怎么办?
规格:Rails 3.2.3,Ruby 1.9.3
我被要求从我们的 Rails 应用程序中的许多 ActiveResource 子类中构建一个 gem。
困难在于self.site
调用使用 Rails 环境文件中的常量集(以便开发、测试和生产指向不同的网站)。将我的新 gem 添加到 Gemfile 后,我发现应用程序在环境文件之前加载 gem ,因此我的 ActiveResource 模型破坏了应用程序。
我应该怎么办?
规格:Rails 3.2.3,Ruby 1.9.3
我最终做的是覆盖self.site
and self.format
,self.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
.