`

Rails 数据库表之间关系

阅读更多
一对一关系实例: one-to-one
class Order < ActiveRecord::Base
has_one :paid_order,
     :class_name =>"Order",
     :foreign_key => "order_id",
     :conditions => "paid_on is not null"

在表格上加order_id (表格名单数_id)
class Invoice < ActiveRecord::Base
belongs_to :order


可选参数:class_name, :foreign_key,  rder, :conditions
:dependent => true #删除主表行时同时删除子行
自定义的order用法:
class Customer < ActiveRecord::Base
has_many :orders
has_one :most_recent_order,
     :class_name => 'Order',
     :order => 'created_at DESC'
end


主.从 将被保存
an_invoice = Invoice.new(...)
order.invoice = an_invoice # invoice被保存

从.主 将要手动保存

新增加的方法:
product(force_reload=false)
product=(obj)
build_product(attributes={})
create_product(attributes={})

一对多关系(one-to-many)
class Order < ActiveRecord::Base
has_many :line_items

可选参数除了上面的,还有:exclusively_dependent, :finder_sql,:counter_sql
:exclusively_dependent 在子行没有其它表格瓜葛的情况下使用, 加快处理速度.
:finder_sql的使用实例:
class Order < ActiveRecord::Base
has_many :rails_line_items,
      :class_name => "LineItem",
      :finder_sql => "select l. * from line_items l, products p " +
      " where l.product_id = p.id " +
      " and p.title like '%rails%'"
end

order的用法:
class Order < ActiveRecord::Base
has_many :line_items,
   :order =>"quantity, unit_price DESC"
end


主.从 将被保存
an_invoice = Invoice.new(...)
order.invoices <<an_invoice # invoice

class LineItem < ActiveRecord::Base
belongs_to :order
. . .


has_many后可以引用集合:
order = Order.find(123)
total = 0.0
order.line_items.each do |li|
total += li.quantity * li.unit_price
end


新增加的方法:
orders(force_reload=false)
orders <<order
orders.push(order1, ...)
orders.delete(order1, ...)
orders.clear
orders.find(options...)
orders.build(attributes={})
orders.create(attributes={})


多对多关系(many-to-many):
class Product < ActiveRecord::Base
has_and_belongs_to_many :categories
#. . .
class Category < ActiveRecord::Base
has_and_belongs_to_many :products
#. . .


要创建一个中间表格:
categories_products
两表格名字复数形式相联, 排字母前后排序

表格内连关联键


预载子表
用:include将子表内容加入内存,提高查询速度, 但损耗内存:
for post in Post.find(:all, :include => [:author, :comments])
puts "Post: #{post.title}"
puts "Written by: #{post.author.name}"
puts "Last comment on: #{post.comments.first.created_on}"
end


自动计算子表行数
belongs_to加参数:
counter_cache => true

数据库加 子表格名(复数)_count 段, 并加 :default=>0参数.
然后用 .size可以读取子表行数.
刷新数据读法:
product.line_items(:refresh).size
分享到:
评论

相关推荐

    使用Rails 数据库DSL与PHP协作开发 - 色色

    1. **Rails数据库DSL的介绍**:解释Rails如何使用DSL来简化数据库查询,比如`find_by`, `where`, `order`, `limit`, `joins`, `includes`等方法。 2. **与PHP的协作**:讨论如何在Rails项目中集成PHP代码或服务,...

    免费下载!!! ruby on rails -- redmine 项目的表结构详细说明以及关联关系

    这些表之间的关联关系构建了 Redmine 的核心功能,例如,`users` 与 `issues` 之间的关联允许追踪问题的所有者和分配者,`changesets` 与 `changes` 之间的关联则反映了代码仓库的变更历史。理解这些表结构对于定制 ...

    Ruby-RailsErd为Rails应用程序生成实体关系图

    ERD是数据库设计的基础,它通过图形化方式展示了各个实体(表)之间的关系,包括一对一、一对多、多对多等关联。在Rails框架中,这些实体通常对应于Rails的模型(models),而关联则通过模型之间的`has_many`、`...

    Ruby-SecondBase为Rails提供双数据库无缝相集成

    通过SecondBase,开发者可以方便地在不同的数据库之间切换,执行特定的数据操作,比如创建、迁移和进行测试。 创建数据库时,SecondBase允许你在配置文件中定义额外的数据库连接,然后在模型中声明使用哪个数据库。...

    语言后端:Lin-guage应用程序的Ruby on Rails数据库

    总的来说,"语言后端:Lin-guage应用程序的Ruby on Rails数据库"涉及的内容包括但不限于Ruby on Rails的MVC架构、Active Record ORM、数据库配置、模型创建、数据库迁移、关联关系、查询优化以及性能提升策略。...

    中文版rails教程

    在Ruby on Rails中,开发者可以快速构建功能丰富的动态网站,因为它提供了大量的内置功能和库,如数据库连接、ORM(对象关系映射)系统ActiveRecord、模板引擎ActionView以及路由系统ActionController等。...

    rails敏捷开发的购物车系统

    创建购物车模型(Cart)和商品模型(Product),定义它们之间的关系,如多对多关系,通过一个关联表记录每个购物车包含的商品及其数量。使用`has_and_belongs_to_many`或`has_many :through`关联来实现这一关系。 ...

    Ruby on Rails源代码

    2. **ActiveRecord**:作为ORM(对象关系映射)层,ActiveRecord使得Ruby对象与数据库表之间的交互变得简单。源代码中的`app/models`目录包含所有数据模型,每个模型类对应数据库中的一个表。你可以学习如何定义属性...

    railsAPI

    Rails 提供了一系列内置的工具和约定,如ActiveRecord(ORM,对象关系映射),使得数据库操作变得简单。ActiveRecord允许开发者用Ruby代码定义数据库表的结构,以及与表相关的操作,如创建、读取、更新和删除(CRUD...

    好用的rails 2.0 Api 文档

    在Rails 2.0中,Active Record是ORM(对象关系映射)的一部分,它使得Ruby类可以直接与数据库表进行交互。每个Active Record类都代表一个数据库表,类的实例对应表中的行,类的属性对应列。Active Record提供了许多...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **作用**:通过Active Record,开发者可以直接在模型类中定义数据表的字段和关系,而无需编写复杂的SQL查询语句。 #### 二、验证 - **定义**:验证是在保存数据之前对模型进行检查的过程,确保数据符合预期的...

    rails查询学习笔记

    在Rails中,数据库查询主要通过ActiveRecord来实现,这是一个强大的ORM(对象关系映射)工具,能够将数据库表与Ruby类关联,简化数据操作。 描述中虽然没有具体信息,但我们可以推测这可能是一篇关于Rails中查询...

    Ruby on Rails 教程 - 201406

    Rails的ActiveRecord是ORM(对象关系映射)库,使得Ruby类可以直接映射到数据库表,简化了数据库操作。例如,一个名为`User`的类可以对应数据库中的`users`表,通过ActiveRecord的查询语法,可以轻松进行CRUD(创建...

    rails2-sample

    MVC是Rails的核心架构之一,这一章节将详细介绍这三个组件的作用和相互关系。模型负责与数据库交互,管理数据;视图用于展示数据给用户;控制器则处理用户请求,协调模型和视图之间的操作。了解并正确运用MVC模式是...

    rails 项目起步示例

    - **ActiveRecord**:Rails内置的ORM(对象关系映射)工具,负责与数据库的交互。 - **Routes**:Rails的路由系统将URL映射到控制器的行动上,定义了应用程序的导航路径。 - **Scaffolding**:快速生成基本的CRUD...

    Rails相关电子书汇总

    1. **ActiveRecord**:这是Rails的ORM(对象关系映射)组件,它允许开发者通过Ruby对象与数据库进行交互,无需编写SQL代码。 2. **ActionController**:负责处理HTTP请求,并将数据转发给相应的模型和视图。它管理...

    Ruby on Rails入门经典代码

    - Associations:定义模型之间的关系,如has_many、belongs_to等。 - Validations:在保存到数据库前验证模型数据的有效性。 5. **Rails测试**: - Test-Driven Development (TDD):先写测试,再编写满足测试的...

    rails学习教程

    ActiveRecord是Rails中的ORM(对象关系映射)库,它自动处理数据库操作。通过定义模型类,你可以创建、读取、更新和删除数据库记录,无需写SQL语句。 七、Rails的测试 Rails强调TDD(测试驱动开发),内置了Test::...

    ruby on rails在线考试系统

    2. 数据库集成:Rails默认使用ActiveRecord,这是一个ORM(对象关系映射)库,允许开发者用Ruby代码操作数据库,无需编写SQL。在这个在线考试系统中,数据库可能包含试题、答案、考生信息、考试记录等表。 3. ...

    rails 离线安装包

    10. **ActiveRecord**:Rails内置的ORM(对象关系映射)库,它简化了数据库操作。模型类对应数据库表,类的方法对应SQL查询。 11. **TDD与BDD**:Rails鼓励使用测试驱动开发(TDD)和行为驱动开发(BDD),如RSpec和...

Global site tag (gtag.js) - Google Analytics