#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 без добавления этого.