从Ruby中的模型中获取可用列名的数组

时间:2013-12-03 11:46:05

标签: ruby-on-rails ruby arrays

我想知道是否有办法获取所有可用的列名并将它们作为符号放在数组中?

让我们说这个表看起来像这样(取自schema.rb):

t.integer  "inst_number"
t.string   "name"
t.string   "street"
t.integer  "postcode"
t.string   "city"

现在我有一个方法与我定义的相应模型:

def self.attributes
    [
      :inst_number,
      :name,
      :street,
      :postcode,
      :city
    ].freeze
end

有没有办法让他们在数组中进行侦听,这样我每次迁移时都不必手动更新self.attributes?

2 个答案:

答案 0 :(得分:4)

假设表名为'users'&型号名称为User

您可以使用

获取数组o列名称
User.column_names # This gives array of strings of column names

将其作为符号

User.column_names.map(&:to_sym)

答案 1 :(得分:0)

我认为更好的解决方案可能是annotate宝石。它完全符合您的要求,您需要做的就是安装它:

#gemfile
gem "annotate", "~> 2.6.0"

#command line
gem install annotate

然后运行annotate

它会自动更新每个'model'.rb文件中的模型属性。如果进行更改,只需再次运行注释 - 或者甚至更好地设置rake任务以在每次迁移时运行它。