ruby-on-rails ruby activerecord rails-activerecord alias-method

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.