根据this DBA question,除了首先按正确顺序创建列之外,无法在PostgreSQL中指定数据库列的顺序。
但是,我并不关心PostgreSQL本身的列顺序,因为我唯一一次查看列是在Rails中。是否可以在Rails中配置我的模型,以便当我使用awesome_print
检查它们或打印Model.attribute_names
时,它们会按照我喜欢的顺序显示其属性?
答案 0 :(得分:1)
嗯,你不能通过在Rails模型中设置一些选项来真正订购属性,因为attribute_names
的实现是:
# File activerecord/lib/active_record/attribute_methods.rb, line 271
def attribute_names
@attributes.keys
end
它只返回@attributes
哈希的键,它们是属性名称本身。
然而,你可以做的是操纵方法返回本身,因为它是一个简单的Array
,所以你可以以你喜欢的方式订购。
链接到文档:http://apidock.com/rails/ActiveRecord/AttributeMethods/attribute_names
答案 1 :(得分:1)
Model.attribute_names
返回一个数组,@model.attributes
返回一个哈希值,两者都是可枚举的。这意味着您可以使用sort
:
Model.attribute_names.sort
@model.attributes.sort.to_h
如果您想以任意顺序使用它们,您可以创建一个继承自SimpleDelegator的演示者类:
class ModelPresenter < SimpleDelegator
def inspect
{
name: name,
email: email,
# ...
}
end
end
然后在您的视图中初始化它,如:
ModelPresenter.new(@model).inspect