获取每个产品图片 url

Posted

技术标签:

【中文标题】获取每个产品图片 url【英文标题】:Get every product image url 【发布时间】:2021-09-06 10:50:22 【问题描述】:

我使用 Rails 作为后端,React 作为前端。 我已经使用ActiveStorage 进行文件上传,并且成功上传到后端。问题是我无法将带有我的 json 的 image url 发送到我的前端以在页面上显示 image-preview。 所以我只想将所有的图片 url 发送到前端并显示出来。

products_controller.rb

# Main Preview
  def index
    @product = Product.paginate(:page => params[:page], per_page: 3).order(created_at: :desc)
    @allProducts = Product.all
    @allProductsImage = Product.all.image
    @image = url_for(@allProductsImage)

    @allProductsImage.map  |product|
      product.as_json.merge( image: url_for(product.image) )
    
    
    render json: 
      products: @product,
      image_url: @image,
      allProducts: @allProducts,
      page: @product.current_page,
      pages: @product.total_pages
    
  end



Product.jsx

const [imageSource, setImageSource] = useState("https://image.com/1920x1080");
useEffect(() => 
    AOS.init();
    fetchProducts(currentApi);
    axios
      .get("/api/v1/products/index",  withCredentials: true )
      .then((response) => 
        setImageSource(response.data.image_url);
      )
      .catch((error) => 
        console.log("Check Login Error", error);
      );
  , [imageSource]);

每次我调用 Product.image 我都会遇到 undefined method 'image' 并且在使用 Product.find(params[:id]) 之后我会遇到 cant find product by id error。 我看过一些使用序列化程序的文章,但我真的不想使用它。 如何获取每个产品的图片网址并将其呈现为 image_url 部分中的 json?

【问题讨论】:

【参考方案1】:
class Product
  def image_url
    Rails.application
         .routes
         .url_helpers
         .rails_blob_path(image)
  end
end
def index
  if params[:page].present?
    products = Product.paginate(page: params[:page], per_page: 3)
    render json: 
      products: products.as_json(methods: :image_url),
      page: params[:page],
      per_page: 3 
    
  else
    @products = Product.all
    render json: 
      products: products.as_json(methods: :image_url),
    
  end
end

您编写控制器的方式完全没有意义。在响应中同时包含分页和未分页的记录违背了分页的全部目的。

在响应中有一个 image_url 键也没有意义。您正在渲染一组图像。那实际上会是什么?第一个产品的图片?

因为这个原因,这永远不会起作用:

@allProductsImage = Product.all.image

image 是单个产品的属性,您在整个记录集合上调用它。

还要与您的命名保持一致。在 JSON 响应中使用 snake_casecamelCase - 但不要混合使用。

【讨论】:

以上是关于获取每个产品图片 url的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce如何获取最近订单的产品图片

如何从 wordpress 中的帖子页面 id 获取 acf 的画廊图片 url

如何从联系人中获取联系人图片 URL?

Firebase getDownloadURL() 在获取图片 URL 时真的很慢

从 C# 中的属性获取图像 URL

kali之获取靶机的图片和看的url