我发现很难轻易看到我的所有模型类中存在哪些属性/属性,因为它们没有在我的类文件中明确定义。
为了发现模型属性,我保持schema.rb文件打开并在它和我正在编写的代码之间翻转。这很有效,但是很笨重,因为我必须在读取模式文件以获取属性之间切换,模型类文件检查方法,以及我正在编写的任何新代码调用属性&方法。
我的问题是,当您第一次分析Rails代码库时,如何发现模型属性?你是否一直打开schema.rb文件,或者是否有更好的方法不涉及在模式文件和模式之间跳转?模特档不断?
答案 0 :(得分:259)
对于Schema相关的东西
Model.column_names
Model.columns_hash
Model.columns
例如AR对象中的变量/属性
object.attribute_names
object.attribute_present?
object.attributes
例如没有超类继承的方法
Model.instance_methods(false)
答案 1 :(得分:25)
有一个名为Annotate models的rails插件,它将在模型文件的顶部生成模型属性 这是链接:
https://github.com/ctran/annotate_models
要使注释保持同步,您可以编写任务以在每次部署后重新生成注释模型。
答案 2 :(得分:12)
如果您只对数据库中的属性和数据类型感兴趣,可以使用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:create
和rake 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
答案 3 :(得分:9)
描述模型我使用以下代码段
Model.columns.collect { |c| "#{c.name} (#{c.type})" }
再次,如果你看起来很漂亮,可以描述你ActiveRecord
,而不需要通过迁移或跳过那个开发人员,然后你就可以在属性中发表评论。
答案 4 :(得分:4)
some_instance.attributes
来源:blog