Ответ 1
ActiveRecord использует method_missing
(AFAIK через ActiveModel::AttributeMethods#method_missing
) для создания методов доступа к атрибутам и мутаторам в первый раз их называют. Это означает, что нет метода langEN
, когда вы вызываете alias_method
и alias_method :name, :langEN
с ошибкой "undefined". Выполнение псевдонимов явно:
def name
langEN
end
работает, потому что метод langEN
будет создан (через method_missing
) при первом вызове.
Rails предлагает alias_attribute
:
alias_attribute (new_name, old_name)
Позволяет создавать псевдонимы для атрибутов, которые включают методы getter, setter и query.
который вы можете использовать вместо этого:
alias_attribute :name, :langEN
Встроенный method_missing
будет знать об псевдонимах, зарегистрированных с помощью alias_attribute
, и при необходимости создаст соответствующие псевдонимы.