前天我们看到了怎样在关联中定义额外的属性,这次我们看看怎样在关联中定义行为
我们以下面的关联为例:
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的数组集合。 数组元素支持对象:ActiveRecord,Mongid,哈希。 在您的Gemfile中: gem 'to_xls-rails' # Last officially released gem # gem "to_xls-rails", :git => ...
**ActiveRecord**是Ruby on Rails的核心组件之一,它提供了一种简洁的方式来进行数据库交互,通过模型对象(Models)将数据库表映射到程序中。这种方式简化了数据库操作,使得开发人员能够更加专注于业务逻辑而不是...
Rails 3.1 及以后版本的 ActiveRecord 查询API发生了重大变化,主要目的是为了提供更清晰、更可维护的代码,并且提高性能。在 Rails 2.x 中,许多使用哈希参数的查询方法如 `:conditions`, `:include`, `:joins` 等...
Hashid Rails 该宝石可让您轻松在Rails应用程序中使用 。 您的模型将使用唯一的短哈希,例如“ yLA6m0oM”,“ 5bAyD0LO”和“ wz3MZ49l”,而不是使用诸如1、2、3之类的序号的模型。 数据库仍然会使用整数,因此...
userstamp, 这个 Rails 插件扩展ActiveRecord Userstamp插件( v-2.0 )概述Userstamp插件扩展了 ActiveRecord::Base,以添加对'创建者','更新程序'和'deleter'属性的自动更新。 它是基于 ActiveRecord::Timesta
**ActiveRecord**是Ruby on Rails框架中的核心组件之一,它实现了ORM的概念,允许开发者以面向对象的方式处理数据库记录。通过ActiveRecord,开发者可以轻松地创建、读取、更新和删除数据库中的数据,而无需编写复杂...
没有Rails的ActiveRecord 只是在没有Rails的情况下使用ActiveRecord迁移的简单示例您可以执行的任务: rake db:create rake db:migrate rake db:dropRails 5+的注意事项请注意,即使使用Rails 5,您也需要rake db:...
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...
在Ruby on Rails框架中,ActiveRecord是一个至关重要的组件,它负责模型(Model)与数据库之间的交互。本实例将深入探讨ActiveRecord的基本用法,帮助理解如何在实际开发中有效地运用这个强大的工具。 首先,让我们...
Ruby on Rails,简称Rails,是由David Heinemeier Hansson基于Ruby语言开发的一个开源Web应用程序框架。这个框架遵循“约定优于配置”(Convention over Configuration)的原则,致力于简化Web应用的开发流程,提高...
关于¶ ↑ 这个 gem 的动机是为传统的 Rails/ActiveRecord 项目提供一个简单易懂、易于破解和扩展的管理界面。 它是为现实世界的生产项目构建和提取的。 最初创建为 `lib`,现在可以作为 Rails 引擎 (gem) 安装到...
Ruby on Rails Guides_ A Guide to Active Record Associations.pdf
在Ruby on Rails框架中,ActiveRecord是一种用于实现数据库抽象层的对象关系映射(ORM)工具。它为开发人员提供了一种简单而强大的方式来处理数据库记录。本文档旨在为开发者提供一系列关于如何高效、规范地使用...
thinking-sphinx, activerecord/Rails的Sphinx插件 ThinkingThinking是将ActiveRecord连接到Sphinx完整文本搜索工具的库,并与 Rails ( 但也适用于其他 ruby 网络框架) 紧密集成。 当前版本为 v3.4.2.插件升级升级时...
综上所述,《Ruby on Rails Guides_ A Guide to Testing Rails Applications.pdf》是一个全面的资源,无论你是Rails新手还是资深开发者,都能从中学习到如何为Rails应用编写高质量的测试。从理论到实践,从单元测试...
**ActiveRecord查询接口**:这是Rails中最基础的查询方式,如`Model.find(id)`用于根据ID获取记录,`Model.where(condition)`用于根据条件筛选记录,`Model.order(column)`用于排序,`Model.includes(:association)`...