ActiveRecord uses method_missing
(AFAIK via ActiveModel::AttributeMethods#method_missing
) to create attribute accessor and mutator methods the first time they're called. That means that there is no langEN
method when you call alias_method
and alias_method :name, :langEN
fails with your "undefined method" error. Doing the aliasing explicitly:
def name
langEN
end
works because the langEN
method will be created (by method_missing
) the first time you try to call it.
Rails offers alias_attribute
:
alias_attribute(new_name, old_name)
Allows you to make aliases for attributes, which includes getter, setter, and query methods.
which you can use instead:
alias_attribute :name, :langEN
The built-in method_missing
will know about aliases registered with alias_attribute
and will set up the appropriate aliases as needed.