Актив ' ' отсутствует в конвейере актива

Снимок экрана с сообщением об ошибке

Если я не добавляю изображение в продукт, то он работает нормально с изображением по умолчанию, но если я добавляю изображение с помощью административной панели spree, то на переднем крае я получаю эту проблему.

Внутри:- app/helpers/spree/trackers_helper.rb

module Spree
  module TrackersHelper
    def product_for_segment(product, optional = {})
      {
        product_id: product.id,
        sku: product.sku,
        category: product.category.try(:name),
        name: product.name,
        brand: product.brand.try(:name),
        price: product.price,
        currency: product.currency,
        url: product_url(product),
      }.tap do |hash|
        hash[:image_url] = asset_url(optional.delete(:image).attachment) if optional[:image]
      end.merge(optional).to_json.html_safe
    end
  end
end

Внутри:- app/views/spree/shared/_products.html.erb

<% content_for :head do %>
  <% if products.respond_to?(:total_pages) %>
    <%= rel_next_prev_link_tags products %>
  <% end %>
<% end %>

<div data-hook="products_search_results_heading">
  <% if products.empty? %>
    <div data-hook="products_search_results_heading_no_results_found">
      <%= Spree.t(:no_products_found) %>
    </div>
  <% elsif params.key?(:keywords) %>
    <div data-hook="products_search_results_heading_results_found">
      <h6 class="search-results-title"><%= Spree.t(:search_results, keywords: h(params[:keywords])) %></h6>
    </div>
  <% end %>
</div>

<% if products.any? %>
  <div id="products" class="row" data-hook>
    <%= render partial: 'spree/products/product', collection: products, locals: { taxon: @taxon } %>
  </div>
<% end %>

<% if products.respond_to?(:total_pages) %>
  <%= paginate products, theme: 'twitter-bootstrap-3' %>
<% end %>

1 ответ

Spree использует ActiveStorage для хранения файла изображения. Они находятся в папке хранения проекта spree. Один из способов загрузить их в пакетном режиме - использовать API остальных.

https://guides.spreecommerce.org/api/product_images.html

Для остальных API я использую unirest.

POST /api/v1/products/a-product/images

a-product = friendly_id (если быть точным, имя пули), они хранятся в таблицах friendly_id_slug. Когда вы загружаете изображение в Spree, Spree ищет имя слага в этой таблице и загружает его в ActiveStorage. Записи будут сохранены в таблицах spree_assets, active_storage_blobs и active_storage_attachments соответственно.

Другие вопросы по тегам