У меня есть модель продукта со следующими показателями c:
def search_data
{
name: name,
price: price,
created_at: created_at,
posted_at: posted_at,
updated_at: updated_at,
discount_percentage: discount_percentage,
ready_to_post: ready_to_post,
taxon_names: taxon_names,
brand: brand,
sport: sport,
business: business,
gender: gender,
kind: kind,
size: sizes_with_stock,
color: color,
landing: landing,
total_on_hand: total_on_hand
}
end
, определение размера, его и массив хешей, который содержит информацию о размере, и если он имеет запас
def sizes_with_stock
variants.map do |variant|
{
size: variant.option_values.detect { |o| o.option_type.name == 'SIZE' }&.id,
in_stock: variant.in_stock?
}
end.uniq.compact
end
Я попытался отфильтровать свои товары по размеру и хочу получить только те варианты товаров, которые есть в наличии, поэтому я попробовал следующий запрос для товаров, используя searchkick :
{:ready_to_post=>true, :total_on_hand=>{:gt => 0}, :_or=>[{:_and=>[{:gender=>"female"}, {:business=>"dress"}, {:kind=>"shirt"}, {:brand=>"salomon"}, {:size=>{:size => 5100108, :in_stock => true}}]}]}
: size => 5100108 сделать ссылку на размер 'XL'
Поиск: Spree :: Product.search ("*",: where => запрос, порядок: {updated_at:: desc}, страница: ноль , per_page: 20)
И мой результат
RuntimeError: Unknown where operator: :size
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:920:in `block (2 levels) in where_filters'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:852:in `each'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:852:in `block in where_filters'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:830:in `each'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:830:in `where_filters'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:842:in `block (2 levels) in where_filters'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:842:in `map'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:842:in `block in where_filters'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:830:in `each'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:830:in `where_filters'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:838:in `block (2 levels) in where_filters'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:838:in `map'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:838:in `block in where_filters'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:830:in `each'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:830:in `where_filters'
from /home/user/.rvm/gems/ruby-2.3.8/gems/searchkick-3.1.2/lib/searchkick/query.rb:417:in `prepare'