`
hideto
  • 浏览: 2678307 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

每天一剂Rails良药之Adding Behavior to Your ActiveRecord Association

    博客分类:
  • Ruby
阅读更多
前天我们看到了怎样在关联中定义额外的属性,这次我们看看怎样在关联中定义行为
我们以下面的关联为例:
class AddStudentsTables < ActiveRecord::Migration
  def self.up
    create_table :students do |t|
      t.column :name, :string
      t.column :graduating_year, :integer
    end
    create_table :grades do |t|
      t.column :student_id, :integer
      t.column :score, :integer # 4-point scale
      t.column :class, :string
    end
  end

  def self.down
    drop_table :students
    drop_table :grades
  end
end

class Student < ActiveRecord::Base
  has_many :grades
end

class Grade < ActiveRecord::Base
end

需要注意的是我们调用student.grades()方法时返回的是ActiveRecord::Associations::AssociationProxy而不是Array,而AssociationProxy可以访问find(),count(),create()等Model的方法
我们有两种方法在关联中定义行为:
1,通过module来定义行为
lib/grade_finder.rb
module GradeFinder
  def below_average
    find(:all, :conditions => ['score < ?', 2])
  end
end


app/models/student.rb
require "grade_finder"
class Student < ActiveRecord::Base
  has_many :grades, :extend => GradeFinder
end


2,通过block来定义行为
app/models/student.rb
class Student < ActiveRecord::Base
  has_many :grades do
    def below_average
      find(:all, :conditions => ['score < ?', 2])
    end
  end
end
分享到:
评论

相关推荐

    to_xls-rails:将Rails ActiveRecord或Mongid数据导出到Excel文件

    这个简单的插件使您能够调用to_xls到Rails的数组集合。 数组元素支持对象:ActiveRecord,Mongid,哈希。 在您的Gemfile中: gem 'to_xls-rails' # Last officially released gem # gem "to_xls-rails", :git =&gt; ...

    Pro ActiveRecord Databases with Ruby and Rails.pdf

    **ActiveRecord**是Ruby on Rails的核心组件之一,它提供了一种简洁的方式来进行数据库交互,通过模型对象(Models)将数据库表映射到程序中。这种方式简化了数据库操作,使得开发人员能够更加专注于业务逻辑而不是...

    Rails3的ActiveRecord 查询API.doc

    Rails 3.1 及以后版本的 ActiveRecord 查询API发生了重大变化,主要目的是为了提供更清晰、更可维护的代码,并且提高性能。在 Rails 2.x 中,许多使用哈希参数的查询方法如 `:conditions`, `:include`, `:joins` 等...

    hashid-rails:在Rails应用程序ActiveRecord模型中使用Hashids(http:hashids.orgruby)

    Hashid Rails 该宝石可让您轻松在Rails应用程序中使用 。 您的模型将使用唯一的短哈希,例如“ yLA6m0oM”,“ 5bAyD0LO”和“ wz3MZ49l”,而不是使用诸如1、2、3之类的序号的模型。 数据库仍然会使用整数,因此...

    userstamp, 这个 Rails 插件扩展ActiveRecord.zip

    userstamp, 这个 Rails 插件扩展ActiveRecord Userstamp插件( v-2.0 )概述Userstamp插件扩展了 ActiveRecord::Base,以添加对'创建者','更新程序'和'deleter'属性的自动更新。 它是基于 ActiveRecord::Timesta

    Apress Pro ActiveRecord Databases with Ruby and Rails.pdf

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

    ActiveRecord-Without-Rails:只是在没有Rails的情况下使用ActiveRecord迁移的简单示例

    没有Rails的ActiveRecord 只是在没有Rails的情况下使用ActiveRecord迁移的简单示例您可以执行的任务: rake db:create rake db:migrate rake db:dropRails 5+的注意事项请注意,即使使用Rails 5,您也需要rake db:...

    [Rails] Crafting Rails Applications (英文版)

    You can now easily extend the framework, change its behavior, and replace whole components to bend it to your will, all without messy hacks. This pioneering book is the first resource that deep dives...

    ActiveRecord简单实例_activerecord.zip

    在Ruby on Rails框架中,ActiveRecord是一个至关重要的组件,它负责模型(Model)与数据库之间的交互。本实例将深入探讨ActiveRecord的基本用法,帮助理解如何在实际开发中有效地运用这个强大的工具。 首先,让我们...

    Ruby on Rails实践

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson基于Ruby语言开发的一个开源Web应用程序框架。这个框架遵循“约定优于配置”(Convention over Configuration)的原则,致力于简化Web应用的开发流程,提高...

    SimpleAdmin:SimpleAdmin 是一个 Rails 引擎,它为您的 ActiveRecord 模型提供快速简洁的管理界面

    关于¶ ↑ 这个 gem 的动机是为传统的 Rails/ActiveRecord 项目提供一个简单易懂、易于破解和扩展的管理界面。 它是为现实世界的生产项目构建和提取的。 最初创建为 `lib`,现在可以作为 Rails 引擎 (gem) 安装到...

    Ruby on Rails Guides_ A Guide to Active Record Associations.pdf

    Ruby on Rails Guides_ A Guide to Active Record Associations.pdf

    Ruby on Rails中的ActiveRecord编程指南

    在Ruby on Rails框架中,ActiveRecord是一种用于实现数据库抽象层的对象关系映射(ORM)工具。它为开发人员提供了一种简单而强大的方式来处理数据库记录。本文档旨在为开发者提供一系列关于如何高效、规范地使用...

    thinking-sphinx, activerecord/Rails的Sphinx插件.zip

    thinking-sphinx, activerecord/Rails的Sphinx插件 ThinkingThinking是将ActiveRecord连接到Sphinx完整文本搜索工具的库,并与 Rails ( 但也适用于其他 ruby 网络框架) 紧密集成。 当前版本为 v3.4.2.插件升级升级时...

    Ruby on Rails Guides_ A Guide to Testing Rails Applications.pdf

    综上所述,《Ruby on Rails Guides_ A Guide to Testing Rails Applications.pdf》是一个全面的资源,无论你是Rails新手还是资深开发者,都能从中学习到如何为Rails应用编写高质量的测试。从理论到实践,从单元测试...

    rails查询学习笔记

    **ActiveRecord查询接口**:这是Rails中最基础的查询方式,如`Model.find(id)`用于根据ID获取记录,`Model.where(condition)`用于根据条件筛选记录,`Model.order(column)`用于排序,`Model.includes(:association)`...

Global site tag (gtag.js) - Google Analytics