比如有一个表,是用户users,另外有一个表是角色表roles,然后建立了一个连接表roles_users,包含两个字段role_id和user_id。
想在roles_users中新增数据很容易:
[code="java"]
test=RolesUser.new
test.user_id=1
test.role_id=5
test.save
[/code]
但怎样删除某条数据呢?……需要“id”啊,连接表只有两个字段,没有自己的id的说……
只能加上id这个字段然后用:through那个东东么?
[b]问题补充:[/b]
find(1)是返回不了值的,因为没有id=1的数据,甚至都没有id这个东西,因为它是一张纯的连接表……
[b]问题补充:[/b]
user = User.find(:id)
role.users.delete(user)
这位老大提供的方法看起来也有点像,但语法不对……第二行说没有一个叫“role”的方法,我换成Role也不行,按RDoc里写了个“#”也不行……
那就用delete_all,可以接受要删除的范围条件
例如:[code="ruby"]
RolesUser.delete_all("user_id like '%1%'")
[/code]
[code="ruby"]
test=RolesUser.find(1)
test.destroy
[/code]
连接表是many-to-many自动生成的,你不应该直接操作它的数据,通过添加/删除many-to-many的关系就可以了
要不你模型里,设置下条件不就好了,根据关联的对象去删除
user = User.find(:id)
role.users.delete(user)
role.save #就可以把在roles_users表中user.id 和 role.id 相关联的那行记录给删除了