2

有没有一种方法可以从数据库列名中列出所有活动记录类的属性以及关联中的属性?

Foo.attribute_names不包括从关联生成的虚拟属性

Foo.new.methods 确实包括这些(以及大量不相关的方法),但如果可能的话,我想要一个更精简的方法列表,这些方法仅与 ActiveRecord 属性相关。

有没有我忽略的正确方法来做到这一点?

4

2 回答 2

1

在我的书中,正确的方法是使用attr_accessible来定义可访问的属性。然后在您的模型上,您可以简单地调用Foo.accessible_attributes并获得一个不错的列表。

但是,关联比较棘手,但您可以执行以下操作:

Foo.accessible_attributes.to_a + Foo.reflect_on_all_associations.map(&:name)

如果您不使用attr_accessible,则必须将其与

Bundle.new.attributes.keys - Bundle.protected_attributes.to_a
于 2013-11-04T18:29:56.293 回答
1

我不知道你的情况的确切 Rails 方法,但你可以通过做类似的事情来解决。

Model.attribute_names + Model.reflect_on_all_associations.map {|a| a.name.to_s }

第二部分将为您提供关联的模型方法作为数组中的字符串。

于 2013-11-04T18:28:59.980 回答