Расширить метод класса - PullRequest
0 голосов
/ 07 декабря 2010

Этот код работает нормально.

class ArInvHeader < ActiveRecord

  HUMANIZED_ATTRIBUTES = {
    :shipto_customer_address => _("Ship to customer address ")
  }

  def self.human_attribute_name(attr,options={})
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super
  end

end

Я хочу поместить этот метод в общий файл и использовать его в каждой модели.

def self.human_attribute_name(attr,options={})
  HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end

Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 08 декабря 2010

Я предполагаю, что вы хотите использовать human_attribute_name для всех подклассов ActiveRecord::Base - если это так, это просто вопрос расширения ActiveRecord::Base с помощью этого метода, чтобы он был доступен для всех его подклассов : просто откройте класс, определите метод, и все готово:

class ActiveRecord::Base

  def self.human_attribute_name(attr,options={})
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super
  end

end

Просто поместите это на config/initializers/active_record.rb, и оно будет автоматически требоваться приложением.

В качестве альтернативы, вы можете использовать инструменты i18n, представленные в рельсах, для достижения аналогичного результата - при условии, что ваша локаль en:

# config/locales/en.yml
en:
  activerecord:
    attributes:
      ar_inv_header:
        shipto_customer_address: "Ship to customer address "

Таким образом, вы можете просто позвонить ArInvHeader.human_attribute_name(:shipto_customer_address). Это предпочтительный способ изменить «человеческие имена» моделей и атрибутов ActiveRecord.

0 голосов
/ 07 декабря 2010

Вы можете поместить его в свой application_controller и использовать эту строку:

helper_method :human_attribute_name

Теперь вы можете использовать его в системе

0 голосов
/ 07 декабря 2010

Вы пробовали locale.yml для этой функции?

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