如何在没有级联到源记录的情况下对HABTM关系进行“破坏”?

时间:2014-02-04 17:35:43

标签: ruby-on-rails ruby-on-rails-3

User has_and_belongs_to_many Marketplaces

加入表格为marketplaces_users

可是:

user.marketplaces.first.destroy

销毁联接记录和源市场记录。我只想破坏连接记录。由于某种原因,我无法找到如何做到这一点。

4 个答案:

答案 0 :(得分:1)

您可以首先获取marketplace然后在销毁HABTM关系/记录后保存它来解决此问题。 HABTM通常用于非常简单的用例,您很快就会遇到问题,此时您需要切换到has_many :through

答案 1 :(得分:0)

在相关记录上的集合上使用delete而不是destroy。根据我理解的文件,这删除了“链接”而不破坏记录。 delete将关联作为参数。 user.marketplaces.delete(user.marketplaces.first)

我已经测试了这个,但仅限于Rails 4。

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

请参阅“删除或销毁?”和“什么被删除。”

答案 2 :(得分:0)

你能做到的唯一方法就是

ActiveRecord::Base.connection.execute("delete from marketplaces_users where(market_place_id = #{user.marketplaces.first.id})")

但不确定这是否适用于内部控制器。我已经把它作为种子任务。

答案 3 :(得分:0)

http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many

collection.delete(object, …)
Removes one or more objects from the collection by removing their associations from the join table. This does not destroy the objects.

collection.destroy(object, …)
Removes one or more objects from the collection by running destroy on each association in the join table, overriding any dependent option. This does not destroy the objects.