你如何在Rails中发现模型属性?
去年秋天我开始了我的第一个Rails应用程序,并且不得不在架子上搁置了几个月,所有的时间都花在工作上。 我现在有兴趣回到项目并阅读代码,找出我离开的地方。
Rails在运行时dynamic创build模型属性的事实可以节省大量的重复input,但是我发现很难轻易发现所有模型类中存在的属性/属性,因为它们没有在我的类文件中明确定义。 为了发现模型属性,我保持schema.rb文件处于打开状态,并在它和我正在编写的使用模型属性的任何代码之间翻转。 这样做的工作,但是笨重,因为我必须读取模式文件来拾取属性,模型类文件来拾取方法,以及我正在写的任何新的代码来调用属性和方法。
所以我的问题是,如何在第一次分析Rails代码库时发现模型属性? 你一直保持schema.rb文件打开,还是有一个更好的方式,不涉及在模式文件和模型文件之间不断跳转?
对于架构相关的东西
Model.column_names Model.columns_hash Model.columns
例如AR对象中的variables/属性
object.attribute_names object.attribute_present? object.attributes
例如没有从超类inheritance的方法
Model.instance_methods(false)
有一个名为Annotate models的rails插件,它会在模型文件的顶部生成模型属性,链接如下:
https://github.com/ctran/annotate_models
为了使注解保持同步,您可以编写任务以在每次部署之后重新生成注释模型。
如果您只是对数据库中的属性和数据types感兴趣,则可以使用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
为了描述模型,我使用下面的代码片断
Model.columns.collect { |c| "#{c.name} (#{c.type})" }
再次,这是如果你看漂亮的打印来描述你的ActiveRecord
没有你去通过迁移或跳过开发人员之前,你是足够好的评论属性。
some_instance.attributes
来源: 博客