我开始学习Ruby和Rails,有时候“会议过度配置”会让我感到害怕......
好的,我通过Rails命令在Rails中创建了一个User
模型。使用某些属性创建的User
模型,例如name
和age
。
但是当我打开user.rb
:
class User < ApplicationRecord
end
它只有这些。我找不到attr_accessor
。所以我一直在搜索,我发现属性名称和方法保存在某个地方,所以基本上我仍然可以像往常一样创建对象并引用属性user.name
和user.age
。
我的问题是,Rails中的属性保存在哪里?这是怎么回事?我不认为该属性也保存在超类ApplicationRecord
中,我打开了application_record.rb
:
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
那些属性保存在哪里?以及Ruby如何解析这个属性?我想知道背后的机制。
答案 0 :(得分:5)
ActiveRecord不会修改您的代码,也不会改变实现方式。相反,它是Ruby中常见的模式,它定义方法动态。这通常被称为&#34;元编程&#34;因为你的代码有效地编写代码。请注意,它并不是字面上编写代码,只有当程序在内存中加载它才会自行转换。
通常通过运行SHOW FIELDS
之类的SQL命令来自动发现列,以确定结构和类型。然后相应地生成这些方法。
如果您想了解机制,可以随时阅读ActiveRecord源代码,但请记住,它会执行很多操作,有时可能有点难以导航。