Ruby on rails 设计建议:Gemify ActiveResource子类
我被要求在我们的一个Rails应用程序中用许多ActiveResource子类构建一个gem 困难在于self.site调用在Rails环境文件中使用一个常量集,以便开发、测试和生产指向不同的网站。将我的新gem添加到gem文件后,我发现应用程序在加载环境文件之前加载gem,因此我的ActiveResource模型破坏了应用程序 我该怎么办Ruby on rails 设计建议:Gemify ActiveResource子类,ruby-on-rails,activeresource,Ruby On Rails,Activeresource,我被要求在我们的一个Rails应用程序中用许多ActiveResource子类构建一个gem 困难在于self.site调用在Rails环境文件中使用一个常量集,以便开发、测试和生产指向不同的网站。将我的新gem添加到gem文件后,我发现应用程序在加载环境文件之前加载gem,因此我的ActiveResource模型破坏了应用程序 我该怎么办 规范:Rails 3.2.3、Ruby 1.9.3我最终做的是覆盖self.site、self.format和self.connection,让他们只在第一
规范:Rails 3.2.3、Ruby 1.9.3我最终做的是覆盖self.site、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
然后在从ActiveResource::Base派生的类中扩展MyActiveResource