Imr*_*ran 9 oop orm ruby-on-rails rails-activerecord
我在Ruby on Rails中无法理解ORM.根据我的理解,表/列和对象/属性之间存在1:1的关系.所以每条记录都是一个对象.究竟什么是模型?我知道它映射到一张桌子.
我真正追求的是对上述内容的更深入理解.预先感谢您的帮助
我是一名从PHP到Ruby on Rails的Web开发人员.
kik*_*ito 24
"根据我的理解,表/列和对象/属性之间存在1:1的关系.所以每条记录都是一个对象."
这不完全正确,除非你非常宽松地使用术语"对象".表由类建模,而表记录由这些类的实例建模.
假设您有一个clients表,包含列id(autonum)和name(varchar).假设它只有一条记录,id = 1,名字="Ford".然后:
clients将映射到模型类Client.ford = Client.find(1)ford变量上的方法.你可以做ford.id,你会得到1.你可以做ford.name,你会得到字符串"福特".您还可以通过执行更改客户端的名称ford.name = "Chevrolet",然后通过执行ford.save在数据库上提交更改."还有什么是模型?我知道它映射到一个表"
模型只是具有许多非常有用的方法来操作数据库的类.这里有些例子:
brands表(通过其对应的Brand模型)通过外键与您的福特客户端相关联,您可以这样做ford.brands,您将得到一个对象数组,表示brands表上具有client_id = 1的所有记录.这只是一些例子.活动记录提供了更多功能,例如翻译,查询范围或支持单表继承.
最后但并非最不重要的是,您可以将自己的方法添加到这些类中.
模型是不编写"spaguetti代码"的好方法,因为您不得不按功能分离代码.
Joh*_*ley 15
Rails中的ORM是Martin Fowler的企业应用程序架构模式中的Active Record模式的实现.因此,Rails ORM框架被命名为ActiveRecord.
基本思想是将数据库表包装到类中,对象的实例对应于该表中的单个行.因此,创建新实例会向表中添加一行,更新对象会更新行等.包装类会为表中的每个列实现属性.在Rails的ActiveRecord中,这些属性可以使用基于数据库模式的Ruby元编程自动获得.如果需要引入其他逻辑,可以根据需要覆盖这些属性.您还可以添加所谓的虚拟属性,这些属性在基础数据库表中没有对应的列.
Rails是一个模型 - 视图 - 控制器(MVC)框架,因此Rails模型是MVC中的M. 它不仅是上面描述的ActiveRecord包装类,还包含业务逻辑,包括由ActiveRecord的Validation模块实现的验证逻辑.
| 归档时间: |
|
| 查看次数: |
9174 次 |
| 最近记录: |