Rails开发细节(七)ActiveRecord Associations关联

1.为什么需要关联

很多时候,比如说电子商务中的用户和订单,一个用户会有很多的订单,一个订单只属于一个用户,这就是一种关联。

在创建订单的时候需要用户主键作为外键,删除用户的的同时需要删除用户的订单。

在rails中可以向下面这样订单关联。

class Customer < ActiveRecord::Base
  has_many :orders, :dependent => :destroy
end 

class Order < ActiveRecord::Base
  belongs_to :customer
end

就可以像下面这样创建订单,删除用户。

@order = @customer.orders.create(:order_date => Time.now) 

@customer.destroy

2.关联的类型

有下面6中关联。

belongs_to

has_one

has_many

has_many :through

has_one :through

has_and_belongs_to_many

2.1.belongs_to

belongs_to是一种一对一的关联。表达一种属于的关系。

就像一个订单只能属于个用户。在订单表会有一个字段存储用户主键,这个字段是订单表的外键。

class Order < ActiveRecord::Base
  belongs_to :customer
end

2.2.has_one

has_one也是一种一对一的关联。表达一种有一个的关系。

就像一个供应商只能有一个账户。账户表有一个供应商主键,是账户表的外键。

class Supplier < ActiveRecord::Base
  has_one :account
end

2.3.has_many

has_many是一种一对多的关联。表达有多个的关系。

就像一个用户有多个订单。

class Customer < ActiveRecord::Base
  has_many :orders
end

has_many关联的名称需要使用复数形式。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索class
, 订单
, 用户
, 关联
, activerecord
, one class
, 一个
has()
rails activerecord、rails active job、rails activeadmin、activerecord、activerecord模式,以便于您获取更多的相关知识。

时间: 2024-09-15 11:53:08

Rails开发细节(七)ActiveRecord Associations关联的相关文章

Rails开发细节(五)Migrations 数据迁移

1.简介 在rails中用migration可以很方便的管理数据库的结构.可以创建数据库,创建表,删除表,添加字段,删除字段,整理数据. migration就是一系列的class,这些类都继承了ActiveRecord::Migration类. class CreateProducts < ActiveRecord::Migration def up create_table :products do |t| t.string :name t.column :description, :text

Rails开发细节(四)Transactions事务

事务在数据库应用开发中是相当重要的,尤其是在关系数据库中.典型的例子就是银行在转账,在两个账 户之间转账. account1.deposite(100) account2.withdraw(100) 在ActiveRecord中使用transaction方法执行一段block来实现事务.在 block的最后,会提交事务,更新数据库,如果在block中发生异常,数据库会回滚所有改变. Account.transaction do account1.deposite(100) account2.wi

Rails开发细节(三)Participating in the Monitoring Process

Participating in the Monitoring Process 参与监控过程 ActiveRecord控制着model对象 的生命周期,它创建它们,在修改,保存和更新的时候监控它们,并且在删除的时候也进行监控.使用回调函 数,ActiveRecord允许我们的代码参与这个监控过程. ActiveRecord总共定义了20个回调函数.18个 成对的before和after,还有两个例外:after_find和after_initialize. 开发细节(三)Participatin

Rails开发细节(一)

常用命令 rails new new_app cd new_app rake db:create rails server rails generate controller Blog action1 action2 rails generate scaffold Product title:string description:text rails generate model Comment commenter:string body:text post:references rake db

Rails开发细节(九)Rails的测试

1.为什么写测试 rails使得我们很容易就可以写测试.在创建model和controller的时候,rails帮助我们创建了测试的骨架代码. 通过简单的运行你的测试代码,你可以确保你的代码在重构之后任然满足需求的功能. rails测试可以模拟浏览器请求,这样你就可以在不适用浏览器的情况下测试应用的响应情况. 2.测试简介 因为每一个rails应用都会和数据库有大量的交互,因此你的测试也需要一个数据库来进行交互.为了更好的写测试,你需要知道如何建立数据库,以及加载样本数据. 2.1.三个环境 每

Rails开发细节(八)Rails应用的安全

看过本文之后,你应该熟悉下面的内容: 所有显著的对策. rails中session的概念,其中存放的内容,常见的攻击手段. rails中大量的分配问题. 在提供管理接口的时候,你不得不关注的一些事情. 如何管理用户:登陆,退出,在各个层面的攻击方法. 常见的注入攻击方法. 1.简介 web框架帮助开发者构建web应用.它们中的一些还可以帮助你构建安全的web应用.事实上一个框架并不比两一个框架安全,如果你正确的使用,你可以用很多框架构建安全的web应用.rails包含一些聪明的帮助工具,例如防止

Rails开发细节(二)CRUD

Create & Save 创建 & 保存 order = Order.new order.name = "virusswb" order.email = "asdf@exmaple.com" order.save 调用save方法之后就可以保存到数据库了. 还可以用block来创建并保存. Order.new do |order| order.name = "virusswb" order.email = "asdf@

Rails开发细节(六)ActiveRecord Validationa and Callbacks验证和回调

1.对象生命周期 通常情况下,在rails应用中,对象会被创建,修改和删除.ActiveRecord针对这些对象提供了拦截,你可以控制你的应用和这些对象. 验证保证了存入数据库的数据都是有效的.回调和观察者允许你在对象状态发生变化的前后进行一些逻辑操作. 2.验证 2.1.为什么需要验证 验证保证了只有合法的数据才可以存入数据库.例如,你的应用需要确保每个用户都拥有合法的电子邮件地址和邮寄地址. 在存入数据库之前,有很多方法可以验证数据的合法性.包括数据库约束,客户端的验证,controller

Windows下Ruby on Rails开发环境安装配置图文教程_ruby专题

本文详细介绍如何在Windows配置Ruby on Rails 开发环境,希望对ROR初学者能有帮助. 一.下载并安装Ruby Windows下安装Ruby最好选择 RubyInstaller(一键安装包). 下载地址: http://rubyforge.org/frs/?group_id=167 . 我们这里下载目前较新的rubyinstaller-1.9.3-p0.exe 一键安装包.这个安装包除了包含ruby本身,还有许多有用的扩展(比如gems)和 帮助文档. 双击安装,安装过程出现如下