单表继承
官方文档:http://api.rubyonrails.org/classes/ActiveRecord/Base.html
单表继承,在数据库中只有一张表,但映射了了两个以上的model。
比如:文章和相册的分类
文章有文章的分类,相册也有相册的分类。你可以建立两张表,也可以只建立一张表以一个字段值进行区分。
ActioveRecord使用的是建立一张表,用一个type字段,进行区分不同的model。type字段的值为model的类名
如下:
class Category < ActiveRecord::Base
has_many :articles
has_many :photos
end
class PhotoCategory < Category
end
class ArticleCategory < Category
end
create_table :categories,:force => true do |t|
t.column :category_name,:string
t.column :type,:string
end
关于集合的size,count,length
ac = ArticleCategory.find 1
ac.articles.length #=> select * from articles where category_id=1
ac.articles.size#=>select count(*) as count_all from articles where category_id=1
ac.articles.count#=>select count(*) as count_all from articles where category_id=1
可见,如果只是取得记录的数量,就应该避免使用length方法,这个方法会把数据全部取出然后再计算数量。至于size和count效果相同,具体为什么恐怕要从源码上找答案了。
RecordNotFound
find的方法当利用id查询的时候,如果没有记录怎会抛出RecordNotFound的错误。
下面代码,应该很常见了
a = Article.find 1
if a
#something
end
当id为1的文章记录不存在时,真的就返回nil么?
我们当然希望是,只不过需要稍加修改。
思路是,自己添加一个find方法,对父类的find方法进行覆盖。在自己的find方法中调用父类的find方法,当抛出RecordNotFound异常时,返回一个nil值。
代码如下
module HelperModel
def find(*args)
begin
return super
rescue ActiveRecord::RecordNotFound=>ex
return nil
end
end
end
然后在你需要的model中引入,如:
class Photo < ActiveRecord::Base
extend(HelperModel)
end
这样,对find方法的调用则永远不会抛出RecordNotFound异常了,而以nil为代替返回。
分享到:
相关推荐
NHibernate支持二级缓存,通过缓存策略可以提升性能,减少对数据库的访问。常见的缓存提供商有NHibernate.Caches.SysCache(基于ASP.NET缓存)和NHibernate.Caches.CacheSharp(基于Memcached)。 7. **...
- 提供的 `.chm` 文件是 Castle ActiveRecord 的官方帮助文档,包含了详细的功能说明、示例代码和故障排查指南,是学习和解决问题的重要资源。 通过以上介绍,你可以开始探索 Castle ActiveRecord 并将其应用于...
这个手册是专为那些想要在.NET环境中利用Castle ActiveRecord进行数据库操作的学习者准备的。以下是对这个框架的一些关键知识点的详细介绍: 1. **ActiveRecord模式**:ActiveRecord模式将业务对象与数据库表映射,...
#### 二、ActiveRecord简介 **ActiveRecord**是Ruby on Rails框架中的核心组件之一,它实现了ORM的概念,允许开发者以面向对象的方式处理数据库记录。通过ActiveRecord,开发者可以轻松地创建、读取、更新和删除...
- 学习Ruby语言基础,掌握Rails框架的核心概念,如ActiveRecord ORM。 ### 结论 学习Android开发是一个长期的过程,需要不断积累知识并实践。掌握了上述知识点后,不仅能够成为一名合格的Android开发者,还能扩展...
Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速...第一部分:ActiveRecord学习实践系列, 第二部分:Castle IOC容器系列
4. **数据库操作**:ActiveRecord模式的模型类简化了数据库操作,支持SQL语句直接执行。 5. **安全防护**:内置防注入、XSS防护等安全机制,增强系统安全性。 **二、Bootstrap前端框架** Bootstrap是Twitter开源的...
MyBatis-Plus 学习笔记 MyBatis-Plus 是一个基于 MyBatis 的增强工具,旨在简化开发、提高效率。它提供了许多实用的特性和功能,例如无侵入、损耗小、强大的 CRUD 操作、支持 Lambda 形式调用、支持多种数据库、...
二、Ruby语言基础 在深入Rails之前,需要掌握Ruby的基础知识。Ruby是一种动态、面向对象的脚本语言,其语法简洁且表达性强,适合快速开发。理解类、对象、方法、模块等概念,以及熟悉Ruby的块、Proc和Lambda是必要的...
二、ETMVC框架的定位 ETMVC主要针对中小型项目,它的目标是提供易于理解、易于开发的解决方案。框架的三个关键点是: - **简易**:代码结构清晰,开发流程直观,避免繁琐的配置。 - **性能**:在满足功能需求的同时...
每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握MP的使用,从而使Mybatis的的开发更加的高效,达到事半功倍的效果。 适应人群 有一定的Java以及Mybatis框架的基础。 从0开始全面讲解Mybatis-Plus框架...
"敏捷开发第二版ROR必看"这个主题,指的是对敏捷开发方法论与Ruby on Rails的结合应用进行深入学习的教程。此教程特别强调了2006年度的最佳出版物,旨在为开发者提供与时俱进的敏捷开发实践指导。 **敏捷开发介绍**...
- **Rails框架原理**:虽然压缩包未直接提供Rails的书籍,但掌握了Ruby后,可以结合其他在线资源或书籍学习Rails的MVC架构、路由、控制器、模型、视图、数据库交互(ActiveRecord)、测试(Rspec或Test::Unit)、...
《Grails开源项目教学代码第二部分》是针对Groovy和Grails编程语言的深入学习资源,旨在帮助开发者进一步掌握这两个强大的工具。Groovy是一种简洁、动态的Java平台上的编程语言,它提供了更简单的语法和更高的生产力...
它引入了新的Rails版本特性,如ActiveRecord查询接口的增强、Strong Parameters的安全性改进、Asset Pipeline的资源管理,以及Turbolinks等性能优化技术。此外,第二版还深入讨论了Rails 3.x和4.x中的路由系统,以及...
用户数据通常存储在数据库中,使用JFinal的ActiveRecord插件进行操作,简化了数据库操作代码,提高了开发效率。 三、角色管理 角色管理是权限系统的重要组成部分,允许管理员定义不同的角色,并为每个角色分配特定...
对于想要学习电商系统开发的开发者来说,"最新小京东多用户商城二次开发版"是一个宝贵的资源。通过研究其源代码,可以深入了解ThinkPHP5框架的运用,掌握如何构建分布式、高并发的电商平台,以及如何设计和实现分销...