我正在浏览一份同事代码,但我找不到使用此代码的单一教程。有人能指出我使用过的资源。这使得代码非常干净,但我还没有找到任何参考。这只是本课程的一部分。它还包括其他一些方法。
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的两种方法是什么?这是铁轨中的常见模式。
答案 0 :(得分:2)
是的,随着Rails 3中ActiveModel的引入,使用域对象(在本例中称为管理器)已经成为一种越来越常见的模式,它不受实际数据库表支持,但外观和感觉就像模型。
尽管ActiveModel使particularly convenient选择Rails模型特征并将其合并到任意类中,但很长一段时间以来Rails一直是have been encouraging的先驱。
正如您在发布的示例中清楚地说明的那样,此模式允许我们定义虚拟模型和虚拟关联,这些模型和虚拟关联可以轻松利用表单助手和假设模型对象编写的其他轨道细节。