Rails 4 - 通用 alias_attribute

Rails 4 - Generic alias_attribute

我正在尝试使某些模型属性通用 alias_attribute。

由于我需要在数据库中保留字段的原始名称,因此我希望使属性更具可读性。

例如:GenericDataBaseColumn #=> generic_data_base_column

到目前为止,这是我得到的,但没有按预期工作:

self.attribute_names.
    each { |attr| alias_attribute attr.split(/(?=[A-Z])/).
                   join("_").downcase.to_sym, :attr }

我正在使用 alias_attribute 因为我正在使用一些我收到的字段 JSON 并序列化它们,所以我想保留在未来只需进行迁移。

我问这个是因为我已经研究过了,唯一类似的问题是哪个还没有回答。

How to create dynamic attribute aliases in rails?

我仍然不确定这是否有可能实现。

谢谢

显然我对应该如何调用属性有误解。 而不是 self.attribute_names 应该是 attribute_names 因为该方法应该只被实例化的元素调用。

此外,在第一次修复之后,我不得不跳过所有同名属性,因为这会导致 SystemStackError (stack level too deep)

最终的实现应该是这样的:

# Defining alias attributes
attribute_names.each do |attr|
  next if attr.blank? || (attr == attr.underscore)
  alias_attribute attr.underscore.to_sym, attr.to_sym
end

希望这对其他人有帮助。 另外,如果有人有答案,请随时 post 它。谢谢