我有以下型号:
class User
has_many :likes, dependent: :destroy
has_many :artists, through: :likes
end
class Artist
has_many :likes, dependent: :destroy
has_many :users, through: :likes
end
class Like
belongs_to :user
belongs_to :artist
end
我想删除用户< - >艺术家协会(以及不关联对象本身),基于给定条件。我试过了:
user.artists.where(...).delete_all
但艺术家对象也被删除了,而不仅仅是关联。
如果我没有提供条件:
user.artists.delete_all
只删除关联,而不是艺术家对象本身。
那么,如何根据条件从has_many :through
关系中删除关联?
答案 0 :(得分:0)
似乎在这种情况下,在盒子外面思考就行了。
通过直接在连接模型上应用条件,我只能删除关联:
Like.where(...).delete_all
这很简单。
答案 1 :(得分:0)
尝试使用joins
方法添加条件
user.likes.joins(:artist).where(artists: {...}).delete_all
http://apidock.com/rails/ActiveRecord/QueryMethods/joins
如果要销毁对象及其依赖项,请使用destroy_all
方法而不是delete_all
http://apidock.com/rails/ActiveRecord/Relation/destroy_all