2010-10-26 53 views

回答

48

如果你有你的模型的实例,然后user.attributes是模型的属性和值的哈希因此,举例来说,你可以这样做:

user.attributes.each_pair do |name, value| 
    puts "#{name} = #{value}" 
end 

如果你没有一个具体的那么这个类有方法返回关于数据库中的字段的信息,例如User.columnsUser.content_columns。例如

User.columns.each do |column| 
    puts column.name 
end 
+2

从第4轨开始已弃用,现在有什么正确的解决方案? – 2014-10-06 23:14:00

+1

提到哪种方法已被弃用?他们似乎仍然在API文档中。 – mikej 2014-10-06 23:32:15

+2

这对我在Rails 4.2.2上非常有用。谢谢mikej。 – 2015-12-17 13:12:03

1
Article.columns.each do |column| 
    puts column.name 
end 

这遍历所有的文章模型中的列对象。

1

@ model.methods返回对象的所有方法的名称。

@ model.methods.grep(/ = $ /)会返回所有写入方法的名称,所以你可以猜测,如果你有一个setter,那么你也有一个读者,所以这可能是一个“属性”。

你也可以检查属性散列(@ model.attributes),它是一个散列,并与数据库中定义的所有列一起使用,这可能是最可靠的方法,因为“methods”方法可能不包含属性读者(和作者)动态生成。 (它可能取决于您使用的RubyOnRails的版本)。