Один SQL-вызов для уничтожения записей со свойством «a» или «b» в ActiveRecord? - PullRequest
2 голосов
/ 18 сентября 2010

Я хочу уничтожить все объекты, которые имеют parent_type == 'Profile' или child_type == 'Profile', например:

Relationship.destroy_all(:parent_type => "Profile")
Relationship.destroy_all(:child_type => "Profile")

Как объединить это в один метод и один вызов sql?

Пошел с чем-то вроде этого:

class Group < ActiveRecord::Base
  has_many :relationships

  after_destroy :destroy_relationships

  def destroy_relationships
    conditions = %Q|(`relationships`.parent_type IN ("#{self.class.name}","#{self.class.base_class.name}") AND `relationships`.parent_id = #{self.id}) OR (`relationships`.child_type IN ("#{self.class.name}","#{self.class.base_class.name}") AND `relationships`.child_id = #{self.id})|
    Relationship.delete_all(conditions)
  end
end

1 Ответ

2 голосов
/ 18 сентября 2010

Используйте условие SQL вместо хеша:

Relationship.destroy_all("(parent_type = 'Profile') OR (child_type = 'Profile')")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...