`

加強 Active Record 的關連性

阅读更多
很多時候我們會使用 Active Record裡面的條件式關連性,但是有時候會覺得使用的關連性似乎有點太多了、太繁雜了。

像是這樣,有兩個 User 有很多 Email ,但是我們想用 Email 的 status cloumn 來判斷是已讀還是未讀。

class User < ActiveRecord::Base
has_many :emails, :dependent => :delete_all
has_many :read_emails, :class_name => "emails" ,:conditions => "status = 'read'"
has_many :unread_emails , :class_name => "emails" ,:conditions => "status = 'unread'"
end
這樣的作法可以達成下面的效果
a = User.find(1)
a.read_emails
a.unread_emails
雖然方便,但是也意味著光是一個 Email 我們就建立了三個以上的 relationship,並且假設 table 裡面真的有一個叫做 read_emails 的 table ,那不就衝突了嗎?有沒有其他的方式呢?

當然有,這裡有一篇文章講到一些 Active Record relationship Tips ,我最喜歡他的第二個 tips。

class User < ActiveRecord::Base
has_many :emails, :dependent => :delete_all do
def read(reload=false)
@read = nil if reload
@read ||= find(:all, :conditions => "status = 'read'")
end

def unread(reload=false)
@unread = nil if reload
@unread ||= find(:all, :conditions => "status = 'unread'")
end
end
end
在 relationship 後面,加入這樣的方式,可以做到
a = User.find(1)
a.emails.read
a.emails.unread
如此只需要一個 relationship 就可以做倒類似的事情。
分享到:
评论

相关推荐

    Pro Active Record. Databases with Ruby and Rails

    4. **关联**:深入研究Active Record的各种关联类型,如has_many、belongs_to、has_one、has_and_belongs_to_many,以及如何处理关联查询和嵌套关联。 5. **事务**:学习如何使用Active Record事务来保证数据库操作...

    Active Record模式使用问题详解.docx

    此外,Active Record可能难以处理多表关联、事务管理和复杂查询。 相比之下,Data Mapper模式将数据访问逻辑封装在Mapper接口中,使得领域模型可以保持简洁,不包含数据库相关的代码。这种方式更适合大型项目,能够...

    种使用MVC架构开发的Trello,使用Active Record进行数据库查询.zip

    3. **关联**: Active Record支持多种数据库关联,如一对一、一对多、多对多等。在Trello应用中,任务可能属于一个列表,列表又属于一个面板,这种关系可以通过Active Record的关联定义实现。 4. **查询与条件筛选**...

    Rails 3中的Active Record的查询变化.doc

    在Rails 3中,Active Record查询接口发生了显著的变化,这些变化主要是为了提高代码的可读性和性能,引入了懒加载(Lazy Loading)的概念。本文将详细介绍这些查询方式的转变及其背后的动机。 首先,我们注意到旧版...

    enterprise_mti:具有引用完整性的Active Record的多表继承(MTI)

    将具有数据库支持的参照完整性的多个表继承添加到Active Record模型。 关于 Enterprise MTI是一个Ruby库,用于向Active Record模型添加多个表继承。 与其他MTI库不同,其设计可在应用程序和数据库级别上强制执行...

    Rails相关电子书汇总二

    6. **事务和并发控制**:介绍如何使用Active Record进行事务处理,确保数据的一致性,以及在并发环境下处理问题。 7. **性能优化**:讨论查询性能优化策略,如避免N+1查询,使用预加载(eager loading),以及索引...

    ActiveRecordUploadableImageBehavior:Yii Active Record 可上传图像行为

    4. **数据库关联**:在 Active Record 模型中创建字段,如 `image_path` 或 `thumbnail_path`,用于存储图像文件的路径信息。 5. **缩略图生成**:自动创建和存储图像的缩略图,以适应不同的显示需求。 6. **删除...

    Java_Active_record:实现我使用Java编写的对象关系映射器以创建动态SQL语句

    这个框架的核心理念是将数据库表与Java类关联,使得数据库中的记录对应于Java对象,而字段对应于对象的属性。通过这种方式,开发人员可以更专注于业务逻辑,而不是底层的数据库操作。 在Java ActiveRecord中,每个...

    TheSaltedHash:SinatraActive Record食品博客

    总结,"TheSaltedHash"项目利用Sinatra的简洁性和Active Record的强大数据库管理能力,构建了一个功能完备的美食博客。通过结合HTML模板,实现了用户友好的界面,让用户能够浏览、交互和分享食谱。这个项目展示了...

    使用CI简化数据库开发.doc

    Active Record类的核心优势在于其简便性、易用性和可维护性。它允许开发者通过面向对象的方式来执行常见的数据库操作,如查询、插入、更新和删除数据,而无需编写复杂的SQL语句。CI虽然支持传统的PHP/MySQL接口,但...

    C# Castle.ActiveRecord CS源码示例教程.zip

    《C# Castle.ActiveRecord 源码示例教程》 Castle.ActiveRecord 是一款基于 C# 的轻量级对象关系映射...同时,结合 Winform 的应用,可以加深对 ORM 框架在实际项目中的应用理解,提升软件开发的灵活性和可维护性。

    详解YII关联查询

    在Yii框架中,为了使Active Record能够执行关联查询,需要在相应的模型类中定义这些关系。这通常是通过覆盖`CActiveRecord`中的`relations()`方法来完成的,该方法返回一个关系配置数组。 ##### 关系配置数组的格式...

    Cactus-CMS:Cactus CMS是基于cakephp 2框架的php内容管理系统

    CakePHP CakePHP是PHP的快速开发框架,它使用Active Record,关联数据映射,Front Controller和MVC等众所周知的设计模式。 我们的主要目标是提供一个结构化的框架,该框架使所有级别PHP用户都可以快速开发健壮的Web...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **定义**:Active Record是一种ORM(对象关系映射)模式,它使得操作数据库中的记录就像操作内存中的普通对象一样简单。 - **作用**:通过Active Record,开发者可以直接在模型类中定义数据表的字段和关系,而无需...

    Yii框架文档(2010.7.18)

    版本1.0.11引入了对表前缀的支持,1.0.8版本增加了对关联匿名函数作为事件处理器的支持,而1.0.5版本则增强了Active Record,支持命名空间,改进了关联查询。 ### Yii框架安装 安装Yii框架相对简单,开发者可以从其...

    好用的rails 2.0 Api 文档

    Active Record提供了许多便捷的方法,如CRUD(创建、读取、更新、删除)操作,以及关联(如has_many、belongs_to等)。 **3. RESTful设计** Rails鼓励使用REST(Representational State Transfer)架构风格来构建...

    Python-ActiveRecord类似Django的查询嵌套式加载和美化reprforSQLAlchemy

    这个主题主要展示了如何在SQLAlchemy中实现类似于Active Record的编程风格,包括如何定义模型、使用Session查询数据、实现嵌套加载以优化性能,以及通过重写`__repr__`方法和使用Mixins来提升代码的可读性和可维护性...

    Agile Web Development with Rails.3rd Edition.2009

    5. **数据库和Active Record**:Active Record是Rails中的ORM(对象关系映射),书中会详细介绍模型关联、查询语言(SQL与AR语句)、迁移和数据库设计原则。 6. **视图和模板**:Rails使用ERB或Haml等模板语言来...

    Beginning Rails 3

    - **安全性增强**:引入了更多安全特性,如 CSRF 保护、安全白名单等,增强了应用的安全性。 #### 九、书籍信息 - **作者**:Cloves Carneiro Jr. 和 Rida Al Barazi。 - **出版信息**:版权 ©2010 年,由 Cloves ...

Global site tag (gtag.js) - Google Analytics