此代码工作正常。
class ArInvHeader < ActiveRecord
HUMANIZED_ATTRIBUTES = {
:shipto_customer_address => _("Ship to customer address ")
}
def self.human_attribute_name(attr,options={})
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
end
我想将此方法放在通用文件中,并在每个模型中使用它。
def self.human_attribute_name(attr,options={})
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
我怎么能这样做?
答案 0 :(得分:2)
我猜你希望human_attribute_name
用于ActiveRecord::Base
的所有子类 - 如果是这样的话,那只是用ActiveRecord::Base
扩展{I}的问题,这样就可以了它的所有子类都可以使用:只需打开类,定义方法,然后就可以了:
class ActiveRecord::Base
def self.human_attribute_name(attr,options={})
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
end
只需将其放在config/initializers/active_record.rb
上,应用程序就会自动要求它。
或者,您可以使用rails中的i18n工具来获得类似的结果 - 假设您的语言环境为en
:
# config/locales/en.yml
en:
activerecord:
attributes:
ar_inv_header:
shipto_customer_address: "Ship to customer address "
这样,您只需拨打ArInvHeader.human_attribute_name(:shipto_customer_address)
即可。这是更改ActiveRecord模型和属性的“人名”的首选方法。
答案 1 :(得分:0)
您是否尝试过locale.yml来实现此功能?
答案 2 :(得分:0)
您可以将它放在application_controller上并使用以下行:
helper_method :human_attribute_name
现在您可以在整个系统中使用它