Неизвестно, где оператор в поиске товара по размерам Ruby - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть модель продукта со следующими показателями 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'
...