Это плохая форма для вызова ActionText в модели? - PullRequest
3 голосов
/ 17 февраля 2010

Допустимо ли вызывать ActionText из ActiveRecord?

def last_updated
  updated_at? ? "Updated #{ActionText::time_ago_in_words(updated_at)} ago" : "never updated"
end

Есть ли аргумент против того, чтобы делать что-то подобное? Должен ли это быть вспомогательный метод?

Ответы [ 2 ]

1 голос
/ 17 февраля 2010

Да. Согласно строгим учениям MVC, это дурной тон и принадлежит помощнику.

Теоретически: этот конкретный кусок функциональности специфичен для представления, поэтому, согласно учениям MVC, он принадлежит помощнику вида.

На практике: это действительно не имеет значения. Я считаю, что ActionText анализируется при загрузке сервера / консоли. Это означает, что файл не нужно загружать снова. Также, вероятно, лучше вызывать метод напрямую вместо включения ActionText со стороны управления памятью.

Ни одно тело не помешает вам добавить этот код в Модель или не заставит вас что-то делать Правильный путь

Лично я предпочитаю определять такие виды методов в модели только потому, что нахожу синтаксис метода экземпляра (model.last_updated) более эстетически привлекательным, чем у помощника (last_updated(model)). Однако динамическая природа рубина позволяет вам использовать его в обоих направлениях. По сути, определите методы экземпляра в вашей модели, которые доступны только в представлениях. Все, что ему нужно, это дополнительный шаг.

Если вы действительно заинтересованы в этом дополнительном шаге, он будет выглядеть следующим образом:

module ModelHelper 
  def included(base)
    Model.send(:include, ModelInstanceMethods)
  end

  module ModelInstanceMethods
    def last_updated
      updated_at? ? "Updated #{ActionText::time_ago_in_words(updated_at)} ago" : "never updated"
    end
  end
end

Где Model - имя класса модели, частью которой должен быть этот метод.

0 голосов
/ 17 февраля 2010

Я бы предложил поместить это в помощник, а не в модель. Похоже, этот метод будет использоваться для генерации контента для представления, для которого и нужны помощники.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...