2016-10-13 3 views
3

Я просматриваю код коллег и не могу найти ни одного учебника, где это было использовано. Может кто-нибудь указать мне на некоторые ресурсы, где это было использовано. Это сделало код очень чистым, но я не нашел ссылки на него. Это только часть этого класса. Он включает другие другие методы.Является ли это известным шаблоном диспетчера 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

Где мой коллега? – MarsAtomic

+0

'def [] = (attr, value)' и 'def [] (attr)' являются скопированными сеттерами и геттерами. Они вызывается, когда вы выполняете 'manager [: foo]' и 'manager [: foo] = 'bar''. – max

+0

У Ruby есть много таких нечетных методов (например, '+', '==', '<=>'), поскольку большинство операторов - это просто методы. – max

ответ

2

Да, с внедрением ActiveModel в Rails 3, он стал все более распространенным шаблоном для использования объектов домена (называемых в этом случае менеджером), которые не подкреплены реальной таблицей базы данных, но которые выглядят и выглядят как модели ,

Даже если ActiveModel делает particularly convenient выбирать Rails особенности модели, которые будут включены в произвольных классов, эта модель является то, что Rails пионерами have beenencouraging так давно.

Как показано в примере, который вы опубликовали, этот шаблон позволяет нам определять виртуальные модели и виртуальные ассоциации, которые могут легко использовать преимущества хэндлеров форм и других рельсовых тонкостей, написанных в предполагаемых объектах модели.

+0

Да .. Спасибо за ссылку .. Я видел это раньше. Этот код не использует reflection_on_association (ассоциация). Однако нам пришлось добавить это, наш код разбивался на coffeescript, не добавляя это. – Rpant