rails多对多
来源:互联网 发布:最火的网络歌曲2016 编辑:程序博客网 时间:2024/04/29 11:44
背景:
明星和管理员,多对多
共有3个表:admins,stars,admins_stars,关联表admins_stars只有两个字段:star_id,admin_id
以一个测试用例作为说明
开头:
测试读:
测试新增:
测试修改:
测试删除:
注意:
Admin.destroy [1,2]是一条条删除纪录
Admin.delete[1,2]批量删除,但在本例中会违反外键约束,delete看来比较适合独立的表的批量删除
明星和管理员,多对多
class Admin < ActiveRecord::Base
has_and_belongs_to_many :stars
end
has_and_belongs_to_many :stars
end
class Star < ActiveRecord::Base
......
has_and_belongs_to_many :admins
......
end
......
has_and_belongs_to_many :admins
......
end
共有3个表:admins,stars,admins_stars,关联表admins_stars只有两个字段:star_id,admin_id
以一个测试用例作为说明
开头:
require File.dirname(__FILE__) + '/../test_helper'
class AdminTest < Test::Unit::TestCase
fixtures :admins,:agents,:stars,:admins_stars
def setup
@admin = Admin.find(1)
end
....
class AdminTest < Test::Unit::TestCase
fixtures :admins,:agents,:stars,:admins_stars
def setup
@admin = Admin.find(1)
end
....
测试读:
def test_read
assert_equal 1, @admin.id
assert_equal "1",@admin.nick_name
assert_equal 2,@admin.stars.length
assert_equal "谭咏麟",@admin.stars[0].name_cn
end
assert_equal 1, @admin.id
assert_equal "1",@admin.nick_name
assert_equal 2,@admin.stars.length
assert_equal "谭咏麟",@admin.stars[0].name_cn
end
测试新增:
def test_create
new_admin = Admin.new
new_admin.login_name="aa"
new_admin.nick_name="bb"
new_admin.star_ids=[2,3]
new_admin.save
new_admin = Admin.find(new_admin.id)
assert_equal 2,new_admin.stars.length
end
new_admin = Admin.new
new_admin.login_name="aa"
new_admin.nick_name="bb"
new_admin.star_ids=[2,3]
new_admin.save
new_admin = Admin.find(new_admin.id)
assert_equal 2,new_admin.stars.length
end
测试修改:
def test_update
assert_equal 2,@admin.stars.length
assert_equal 1,@admin.stars[0].id
assert_equal 2,@admin.stars[1].id
@admin.star_ids=[3]
@admin.nick_name="aa"
@admin.save
@admin = Admin.find(1)
assert_equal 1,@admin.stars.length
assert_equal 3,@admin.stars[0].id
end
assert_equal 2,@admin.stars.length
assert_equal 1,@admin.stars[0].id
assert_equal 2,@admin.stars[1].id
@admin.star_ids=[3]
@admin.nick_name="aa"
@admin.save
@admin = Admin.find(1)
assert_equal 1,@admin.stars.length
assert_equal 3,@admin.stars[0].id
end
测试删除:
def test_delete
assert_equal 4 , Admin.find(:all).length
Admin.destroy [1,2]
assert_equal 2 , Admin.find(:all).length
end
assert_equal 4 , Admin.find(:all).length
Admin.destroy [1,2]
assert_equal 2 , Admin.find(:all).length
end
注意:
Admin.destroy [1,2]是一条条删除纪录
Admin.delete[1,2]批量删除,但在本例中会违反外键约束,delete看来比较适合独立的表的批量删除
- rails多对多
- rails Model 多对多关系学习
- rails 多对多关系及多态
- rails 多对多关系及多态
- Rails宝典之第十七式: 多对多Checkbox编辑
- rails 多表事务
- Rails 多语言支持
- Rails多国语言
- rails 多表查询
- rails中模型的关联关系 一对一、一对多、多对多及named_scope
- rails中模型的关联关系 一对一、一对多、多对多及named_scope
- Ruby on rails开发从头来(五十七)- ActiveRecord基础(多对多关联关系)
- rails中多对多表关联时处理方法总结
- Ruby on rails开发从头来(五十七)- ActiveRecord基础(多对多关联关系)
- rails中多对多表关联时处理方法总结
- rails中多对多表关联时处理方法总结
- Highrise对Rails的意义
- rails 对 ruby 的扩展
- struts1.1到struts1.2.9的移植
- 国内外大型博客收集
- 为 PHP 应用提速、提速、再提速!,第 2 部分: 分析 PHP 应用程序以查找、诊断和加速运行缓慢的代码
- 好网站
- Oracle中几个关于日期方面的SQL实例Oracle中几个关于日期方面的SQL实例
- rails多对多
- 做编程遇到问题最怕不仔细
- 我以后要学会知足
- 为什么用例不是“功能”?
- ERP类站点
- JAVA完全控制Oracle中BLOB CLOB说明 (JDBC,JNDI )
- 好好工作
- ResultSetMete用法实例
- Lesson 3 Sorry,Sir