rails多对多

背景:
明星和管理员,多对多

class Admin < ActiveRecord::Base
has_and_belongs_to_many:stars
end

class Star < 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 '

class AdminTest < 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、付费专栏及课程。

余额充值