Существует объединение таблицы с тремя столбцами: id
, product_a_id
, product_b_id
Как удалить объекты с помощью именованной области?
class ProductConnection < ActiveRecord::Base
belongs_to :product_a, class_name: :Product
belongs_to :product_b, class_name: :Product
end
Я хотел бы, чтобы отфильтровать таблицу по конкретному продукту, независимо в каком столбце идентификатор продукта содержится. Как я могу написать именованный объект, который считает, что product
может быть nil
? Следующий проект вдохновлен a post by Zack Holman хотя это не работы:
scope :find_by_product, \
lambda {|p| p.nil? ? { \
where(["product_a_id = ? OR product_b_id = ?", p.id, p.id]) : {} \
}
Тогда я хотел бы знать, как я могу удалить все продукты, возвращенные в ActiveRecord::Relation
?
Если это сработает для вас, я с удовольствием расскажу больше о синтаксисе, используемом при необходимости. – pdobb
Выглядит неплохо, однако он возвращает все записи таблицы соединений, когда я передаю «nil» в область. – JJD
@JJD, что бы вы хотели, чтобы его возвращали при передаче «nil» в область видимости? При передаче 'nil' вы хотели бы, чтобы он возвращал все, где' product_a_id' 'nil' или' product_b_id' является 'nil'? Если это так, удалите 'if' adn' end' (сохраняя 'product_id = product.try (: id)'. Тогда, если 'product' является' nil', локальный var 'product_id' будет' nil' и остальное должно быть само собой разумеющимся. – pdobb