为什么alias_method在Rails模型中失败


class Country < ActiveRecord::Base
  #alias_method :name, :langEN # here fails
  #alias_method :name=, :langEN=
  #attr_accessible :name
  def name; langEN end # here works
end

在第一次调用中,alias_method失败,并显示:

NameError: undefined method `langEN' for class `Country'

我的意思是,当我这样做时它会失败,例如Country.first.

但是在控制台中,我可以成功调用Country.first.langEN,并看到第二次调用也有效。

我错过了什么?

ActiveRecord 使用 method_missing(AFAIK via ActiveModel::AttributeMethods#method_missing (在第一次调用它们时创建属性访问器和突变器方法。这意味着当您调用alias_method并且alias_method :name, :langEN失败并出现"未定义方法"错误时,没有langEN方法。显式执行别名:

def name
  langEN
end

之所以有效,是因为 langEN 方法将在您第一次尝试调用它时创建(由 method_missing 创建(。

Rails 提供alias_attribute

alias_attribute(new_name、old_name(

允许您为属性创建别名,其中包括 getter、setter 和查询方法。

您可以改用:

alias_attribute :name, :langEN

内置method_missing将了解向alias_attribute注册的别名,并根据需要设置适当的别名。

相关内容

  • 没有找到相关文章

最新更新