Является ли это известным шаблоном Rails Manager

#ruby-on-rails

#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, делают здесь. Является ли это распространенным шаблоном в rails.

Комментарии:

1. Где ваш коллега?

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

3. В Ruby есть множество таких странно выглядящих методов (например , , == , <=> ), поскольку большинство операторов — это просто методы.

Ответ №1:

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

Несмотря на то, что ActiveModel делает особенно удобным выбор функций модели Rails для включения в произвольные классы, этот шаблон является тем, что пионеры Rails поощряют с давних пор.

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

Комментарии:

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