可以将Rails配置为按特定顺序显示模型属性吗?

时间:2016-06-06 13:45:01

标签: ruby-on-rails postgresql

根据this DBA question,除了首先按正确顺序创建列之外,无法在PostgreSQL中指定数据库列的顺序。

但是,我并不关心PostgreSQL本身的列顺序,因为我唯一一次查看列是在Rails中。是否可以在Rails中配置我的模型,以便当我使用awesome_print检查它们或打印Model.attribute_names时,它们会按照我喜欢的顺序显示其属性?

2 个答案:

答案 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