如何仅使用has_and_belongs_to_many关系从关联表中删除记录

时间:2013-09-09 19:39:13

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 has-and-belongs-to-many

我有两个模型hoteltheme,两者都有has_and_belongs_to_many关系

和第三个表名是hotels_themes,所以我想只删除第三个表hotels_themes中的记录。

hotels_themes;
+----------+----------+
| hotel_id | theme_id |
+----------+----------+
|        8 |        4 |
|        9 |        5 |
|       11 |        2 |
|       11 |        4 |
|       11 |        6 |
|       12 |        2 |
|       12 |        5 |
+----------+----------+

我想删除与hotel_id和theme_id匹配的记录。 像sql查询delete from hotels_themes where hotel_id=9 and theme_id=5

一样

2 个答案:

答案 0 :(得分:1)

使用添加到HABTM集合的方法delete

hotel = Hotel.find(hotel_id)
theme = Theme.find(theme_id)
hotel.themes.delete(theme)

答案 1 :(得分:0)

您只需在任一模型实例上清空关联,具体取决于您要删除的内容。例如:

hotel.themes = []
# or
theme.hotels = []