如何在 Rails 中发现模型属性?

我发现很难轻松地看到所有模型类上都存在哪些属性/属性,因为它们没有在类文件中显式定义。

为了发现模型属性,我将 schema.rb 文件保持打开状态,并根据需要在它和正在编写的任何代码之间进行切换。这很有效,但是很笨重,因为我必须在读取模式文件以获取属性、检查方法的模型类文件以及正在编写的调用属性和方法的任何新代码之间进行切换。

我的问题是,当您第一次分析 Rails 代码库时,如何发现模型属性?您是一直打开 schema.rb 文件,还是有一种更好的方法,不需要经常在 schema 文件和模型文件之间跳转?

125671 次浏览
some_instance.attributes

资料来源: 博客

有一个称为 Annotate model 的 Rails 插件,它将在模型文件的顶部生成模型属性 链接如下:

Https://github.com/ctran/annotate_models

为了保持注释的同步,您可以编写一个任务来在每次部署后重新生成注释模型。

用于模式相关的东西

Model.column_names
Model.columns_hash
Model.columns

对于 AR 对象中的实例变量/属性

object.attribute_names
object.attribute_present?
object.attributes

对于没有从超类继承的实例方法

Model.instance_methods(false)

如果只对数据库中的属性和数据类型感兴趣,可以使用 Model.inspect

irb(main):001:0> User.inspect
=> "User(id: integer, email: string, encrypted_password: string,
reset_password_token: string, reset_password_sent_at: datetime,
remember_created_at: datetime, sign_in_count: integer,
current_sign_in_at: datetime, last_sign_in_at: datetime,
current_sign_in_ip: string, last_sign_in_ip: string, created_at: datetime,
updated_at: datetime)"

或者,在您的开发环境中运行了 rake db:createrake db:migrate之后,文件 db/schema.rb将包含您的数据库结构的权威源代码:

ActiveRecord::Schema.define(version: 20130712162401) do
create_table "users", force: true do |t|
t.string   "email",                  default: "", null: false
t.string   "encrypted_password",     default: "", null: false
t.string   "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer  "sign_in_count",          default: 0
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string   "current_sign_in_ip"
t.string   "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
end
end

为了描述模型,我使用以下代码片段

Model.columns.collect { |c| "#{c.name} (#{c.type})" }

这也是如果你看起来非常漂亮的打印来描述你的 ActiveRecord,而没有经历迁移或跳过开发人员之前,你是足够好的注释属性。