Динамические переводы для атрибутов модели в модели или помощник? - PullRequest
0 голосов
/ 19 августа 2011

Допустим, у меня есть модель Partner, которая представляет партнера в рекламной сети. Каждый партнер связан с комиссией, которая может быть фиксированной (в абсолютной валюте) или переменной (в процентах). Таблица partners моделирует это с помощью столбцов commission_type, commission_fixed и commission_variable. Это упрощение, на самом деле существует 7 типов комиссионных, поэтому наследование одной таблицы или нескольких моделей потребует большого количества дополнительного кода.

На мой взгляд, я хочу отобразить комиссию, например:

<div class="partner_commission"><%= partner.commission %></div>

(используя метод модели)

или

<div class="partner_commission"><%= commission(partner) %></div>

(используя вспомогательный метод)

Теперь один важный аспект, который следует отметить, заключается в том, что все приложение многоязычно, поэтому каждая строка в представлении должна быть переведена с помощью помощника I18n.translate / I18n.t. Перевод содержит больше, чем просто числовой / валютный формат, поэтому необходимы специальные переводы для строки комиссии (не говоря уже о том, почему).

Метод выглядит следующим образом (упрощенная версия модели):

def commission
  case self.commission_type
  when 'commission_fixed'
    t(:commission_fixed, :value => self.commission_fixed)
  when 'commission_variable'
    t(:commission_variable, :value => self.commission_variable)
  end
end

Вопрос в том, где я должен реализовать метод commission, чтобы соответствовать философии MVC, лучшим практикам и т. Д.?

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

Причиной включения его в модель является то, что строка комиссии может рассматриваться как производный атрибут и, следовательно, должна быть определена в модели. С другой стороны, я должен вручную включить помощники вида i18n, чтобы использовать I18n.translate в модели, что странно.

Что вы думаете?

1 Ответ

0 голосов
/ 19 августа 2011

Я бы сказал, что это должно идти в модели.Предполагается, что модели контролируют ваши данные, и это именно то, что вы хотите, чтобы ваш комиссионный метод делал.В MVC вполне нормально использовать методы моделей для объединения / изменения данных, чтобы вернуть их в удобной форме.

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