У меня есть модель Product
, которая имеет много Items
. В приложении перечислены уникальные элементы, принадлежащие продукту. Поэтому подумайте о предметах как инвентаре. Следующий запрос захватывает признанные элементы для продукта и удаляет первый элемент (не имеет значения, но он становится признаком, отображаемым отдельно, если вам интересно).Обработка значения nil из метода экземпляра в Rails
# product.rb
has_many :items_in_stock, -> { Item.in_stock }, class_name: 'Item'
def featured_items
items_in_stock.select("DISTINCT ON (condition) id, items.*")
.order(:condition, :price)
.sort_by { |item| item[:price] }[1..-1]
end
# item.rb
scope :in_stock, -> { where(status: 'in_stock') }
Беда в том, когда feaured_items
пустуют, метод возвращает ноль, а не объект отношение. Это означает, что я получаю сообщение об ошибке, если я вызываю @product.featured_items.any?
на продукт, у которого нет элементов. Если я удалю блок sort_by
, я получаю пустой объект отношения.
Есть хороший способ справиться с этим, кроме:
items = items_in_stock.select("DISTINCT ON (condition) id, items.*").order(:condition, :price)
if items.any?
items.sort_by { |item| item[:price] }[1..-1]
end
я не могу изменить упорядоченность запроса, потому что я получаю ошибку о том, порядок условий в порядке, по заявлению должны соответствовать групповые условия.
_ «Беда в том, когда' feaured_items' пустые»_ Я не вижу' featured_items' в любом месте вашего кода. – Phrogz
@Phrogz извините, я исправил его. – dee