ruby on rails - Por qué alias_method falla en el modelo de Rails
ruby-on-rails activerecord (1)
class Country < ActiveRecord::Base
#alias_method :name, :langEN # here fails
#alias_method :name=, :langEN=
#attr_accessible :name
def name; langEN end # here works
end
En la primera llamada, alias_method falla con:
NameError: undefined method `langEN'' for class `Country''
Quiero decir que falla cuando hago, por ejemplo, Country.first .
Pero en la consola puedo llamar Country.first.langEN éxito, y ver que la segunda llamada también funciona.
¿Qué me estoy perdiendo?
ActiveRecord utiliza method_missing (AFAIK a través de ActiveModel::AttributeMethods#method_missing ) para crear métodos de acceso de atributo y mutador la primera vez que son llamados. Esto significa que no hay langEN método langEN cuando llama a alias_method y alias_method :name, :langEN falla con su error de "método indefinido". Hacer el aliasing explícitamente:
def name
langEN
end
funciona porque el método langEN se creará (por method_missing ) la primera vez que intente llamarlo.
Rails ofrece alias_attribute :
alias_attribute (new_name, old_name)
Le permite crear alias para atributos, que incluye getter, setter y métodos de consulta.
que puedes usar en su lugar:
alias_attribute :name, :langEN
El method_missing conocerá los alias registrados con alias_attribute y configurará los alias apropiados según sea necesario.