【问题标题】:design advice: Gemify ActiveResource subclass设计建议:Gemify ActiveResource 子类
【发布时间】:2012-07-26 23:13:49
【问题描述】:

有人要求我在我们的 Rails 应用程序中使用多个 ActiveResource 子类构建 gem。

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

我该怎么办?

规格:Rails 3.2.3、Ruby 1.9.3

【问题讨论】:

    标签: ruby-on-rails activeresource


    【解决方案1】:

    我最终做的是覆盖 self.siteself.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
    

    然后在我从ActiveResource::Base 继承的类中扩展MyActiveResource

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 2012-10-31
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多