Rails根据条件

时间:2015-10-02 17:38:41

标签: ruby-on-rails ruby activerecord

我有以下型号:

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关系中删除关联?

2 个答案:

答案 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