2017-09-29 3 views
3

J'utilise ce code pour afficher des images aléatoires pour des produits similaires dans la même catégorie le produit sélectionné est.Images au hasard dans Ruby on Rails 4 App

<div class="row container product-teaser"> 
    <h4 class="text-center teaser-text"> similar products to <%= @product.title %> : </h4> 

    <% @products_rand.each do |product| %> 
     <div class="col-sm-2 col-xs-3 center-block product-thumbs-product-view" > 
      <%= link_to product_path (product) do %> 
      <% if product.images.first %> 
      <%= image_tag @product.images.first.image.url(:medium), :size => "100%x100%", class: "img-responsive center-block" %> 
      <% end %>   
     <% end %> 
     <h5 class="text-center"><%= link_to product.title, product, class: "text-center" %></h5> 
    </div> 
    <% end %> 
</div> 

Le problème est que les produits de cette loop sont tous affichant l'image pour le produit sélectionné, mais les noms et le lien pour les produits sont corrects. Cette photo montre ce que je veux dire, le client a sélectionné un produit appelé ATLAS et des produits similaires (produits de la même category) s'affichent avec l'image Atlas.

enter image description here

est ici le product_controller.rb

class ProductsController < ApplicationController 
before_action :set_product, only: [:show, :edit, :update, :destroy] 


    def show 

    offset = rand(100) 
    @meta_title = "Concept Store #{@product.title}" 
    @meta_description = @product.description 
    @products_rand = Product.where(category_id: @product.category_id).order("RANDOM()").limit(6) 
end 

private 
# Use callbacks to share common setup or constraints between actions. 
def set_product 
    @product = Product.find(params[:id]) 
end 

# Never trust parameters from the scary internet, only allow the white list through. 
def product_params 
    params.require(:product).permit(:title, :description, :price, :image, :category_id, :stock_quantity, :label_id, :query, :slug, images_attributes: [:image , :id , :_destroy]) 
end 


end 

Répondre

1

Ce:

<%= image_tag @product.images.first.image.url(:medium), :size => "100%x100%", class: "img-responsive center-block" %> 

devrait être:

<%= image_tag product.images.first.image.url(:medium), :size => "100%x100%", class: "img-responsive center-block" %> 

Si vous utilisez @product, vous référencez l'instance à partir de votre contrôleur. Si vous utilisez product, vous faites référence à l'instance de votre boucle.