`
酷的飞上天空
  • 浏览: 521783 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

ActiveRecord学习(二)

阅读更多

单表继承

官方文档: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中文教程+activerecord

    NHibernate支持二级缓存,通过缓存策略可以提升性能,减少对数据库的访问。常见的缓存提供商有NHibernate.Caches.SysCache(基于ASP.NET缓存)和NHibernate.Caches.CacheSharp(基于Memcached)。 7. **...

    Castle ActiveRecord快速入门指南、ActiveRecord帮助文档

    - 提供的 `.chm` 文件是 Castle ActiveRecord 的官方帮助文档,包含了详细的功能说明、示例代码和故障排查指南,是学习和解决问题的重要资源。 通过以上介绍,你可以开始探索 Castle ActiveRecord 并将其应用于...

    Castle ActiveRecord 手册

    这个手册是专为那些想要在.NET环境中利用Castle ActiveRecord进行数据库操作的学习者准备的。以下是对这个框架的一些关键知识点的详细介绍: 1. **ActiveRecord模式**:ActiveRecord模式将业务对象与数据库表映射,...

    Apress Pro ActiveRecord Databases with Ruby and Rails.pdf

    #### 二、ActiveRecord简介 **ActiveRecord**是Ruby on Rails框架中的核心组件之一,它实现了ORM的概念,允许开发者以面向对象的方式处理数据库记录。通过ActiveRecord,开发者可以轻松地创建、读取、更新和删除...

    Android学习基本路线指导.

    - 学习Ruby语言基础,掌握Rails框架的核心概念,如ActiveRecord ORM。 ### 结论 学习Android开发是一个长期的过程,需要不断积累知识并实践。掌握了上述知识点后,不仅能够成为一名合格的Android开发者,还能扩展...

    castle学习资料(自己整理,包含实例代码)

    Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速...第一部分:ActiveRecord学习实践系列, 第二部分:Castle IOC容器系列

    一站式在线教育培训站易学堂在线教育学习系统V2.0 Thinkphp Bootstrap框架

    4. **数据库操作**:ActiveRecord模式的模型类简化了数据库操作,支持SQL语句直接执行。 5. **安全防护**:内置防注入、XSS防护等安全机制,增强系统安全性。 **二、Bootstrap前端框架** Bootstrap是Twitter开源的...

    MyBatis-Plus 学习笔记.pdf

    MyBatis-Plus 学习笔记 MyBatis-Plus 是一个基于 MyBatis 的增强工具,旨在简化开发、提高效率。它提供了许多实用的特性和功能,例如无侵入、损耗小、强大的 CRUD 操作、支持 Lambda 形式调用、支持多种数据库、...

    rails学习教程

    二、Ruby语言基础 在深入Rails之前,需要掌握Ruby的基础知识。Ruby是一种动态、面向对象的脚本语言,其语法简洁且表达性强,适合快速开发。理解类、对象、方法、模块等概念,以及熟悉Ruby的块、Proc和Lambda是必要的...

    ETMVC学习文档提高学习专用,新框架

    二、ETMVC框架的定位 ETMVC主要针对中小型项目,它的目标是提供易于理解、易于开发的解决方案。框架的三个关键点是: - **简易**:代码结构清晰,开发流程直观,避免繁琐的配置。 - **性能**:在满足功能需求的同时...

    全面学习Mybatis插件之Mybatis-Plus_Java框架视频教程

    每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握MP的使用,从而使Mybatis的的开发更加的高效,达到事半功倍的效果。 适应人群 有一定的Java以及Mybatis框架的基础。 从0开始全面讲解Mybatis-Plus框架...

    敏捷开发第二版ROR必看

    "敏捷开发第二版ROR必看"这个主题,指的是对敏捷开发方法论与Ruby on Rails的结合应用进行深入学习的教程。此教程特别强调了2006年度的最佳出版物,旨在为开发者提供与时俱进的敏捷开发实践指导。 **敏捷开发介绍**...

    Rails相关电子书汇总二

    - **Rails框架原理**:虽然压缩包未直接提供Rails的书籍,但掌握了Ruby后,可以结合其他在线资源或书籍学习Rails的MVC架构、路由、控制器、模型、视图、数据库交互(ActiveRecord)、测试(Rspec或Test::Unit)、...

    Beginning_Groovy_and_Grails开源项目教学代码第二部分

    《Grails开源项目教学代码第二部分》是针对Groovy和Grails编程语言的深入学习资源,旨在帮助开发者进一步掌握这两个强大的工具。Groovy是一种简洁、动态的Java平台上的编程语言,它提供了更简单的语法和更高的生产力...

    Agile Web Development With Ruby On Rails第一及第二版

    它引入了新的Rails版本特性,如ActiveRecord查询接口的增强、Strong Parameters的安全性改进、Asset Pipeline的资源管理,以及Turbolinks等性能优化技术。此外,第二版还深入讨论了Rails 3.x和4.x中的路由系统,以及...

    jfinal-club官方管理端框架,仅供参考学习,用户,角色,权限管理-三个实例1.5,4.5,4.7

    用户数据通常存储在数据库中,使用JFinal的ActiveRecord插件进行操作,简化了数据库操作代码,提高了开发效率。 三、角色管理 角色管理是权限系统的重要组成部分,允许管理员定义不同的角色,并为每个角色分配特定...

    最新小京东多用户商城二次开发版

    对于想要学习电商系统开发的开发者来说,"最新小京东多用户商城二次开发版"是一个宝贵的资源。通过研究其源代码,可以深入了解ThinkPHP5框架的运用,掌握如何构建分布式、高并发的电商平台,以及如何设计和实现分销...

Global site tag (gtag.js) - Google Analytics