rails多对多

本文介绍了一个使用ActiveRecord实现的明星与管理员之间的多对多关联关系,并通过一系列测试案例验证了这种关联关系的正确性,包括读取、创建、更新和删除操作。
背景:
明星和管理员,多对多

classAdmin<ActiveRecord::Base
has_and_belongs_to_many:stars
end

classStar<ActiveRecord::Base
......
has_and_belongs_to_many:admins

......
end

共有3个表:admins,stars,admins_stars,关联表admins_stars只有两个字段:star_id,admin_id

以一个测试用例作为说明

开头:
requireFile.dirname(__FILE__)+'/../test_helper'

classAdminTest<Test::Unit::TestCase
fixtures:admins,:agents,:stars,:admins_stars

defsetup

@admin
=Admin.find(1)
end
....


测试读:
deftest_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


测试新增:
deftest_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


测试修改:
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

测试删除:
deftest_delete
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看来比较适合独立的表的批量删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值