这是一个已知的Rails Manager模式

时间:2016-10-13 03:10:05

标签: ruby-on-rails

我正在浏览一份同事代码,但我找不到使用此代码的单一教程。有人能指出我使用过的资源。这使得代码非常干净,但我还没有找到任何参考。这只是本课程的一部分。它还包括其他一些方法。

class Manager
        include ActiveModel::Model
        include ActiveModel::Associations

      attr_accessor :application_id, :user_id, :user_application_id,.........
      belongs_to :application
      belongs_to :user_application
      belongs_to :user .. more belongs .......

       # This method is necessary to enable this ActiveModel Class to be used in views along with Form helpers
      def self._reflect_on_association(association) #:nodoc:
       _reflections[association.to_sym]
      end

      def []=(attr, value)
        self.send("#{attr}=", value)
      end

      def [](attr)
        multi_attribute_ids = [:some_ids.to_s, :someid2.to_s]
        return if multi_attribute_ids.include?(attr)
        self.send(attr)
      end
      def applicant_name 
      end
      -- some more methods
end

这样的"经理"会有什么用?在这里使用self.send的两种方法是什么?这是铁轨中的常见模式。

1 个答案:

答案 0 :(得分:2)

是的,随着Rails 3中ActiveModel的引入,使用域对象(在本例中称为管理器)已经成为一种越来越常见的模式,它不受实际数据库表支持,但外观和感觉就像模型。

尽管ActiveModel使particularly convenient选择Rails模型特征并将其合并到任意类中,但很长一段时间以来Rails一直是have been encouraging的先驱。

正如您在发布的示例中清楚地说明的那样,此模式允许我们定义虚拟模型和虚拟关联,这些模型和虚拟关联可以轻松利用表单助手和假设模型对象编写的其他轨道细节。