Не удается отобразить случайные изображения под изображением продукта в приложении Ruby on rails?

Я хочу иметь возможность показывать 3 случайных изображения продукта под изображением продукта, пока я вставил этот код под изображением продукта, как показано в views/products/show.html.erb

views/products/show.html.erb

    <div class="col-xs-12 col-sm-6 center-block" > 

    <%= image_tag @product.image.url(:medium), class: "img-responsive"  %> 
    #This is the Product image#
    ##EDITED ##
     #Below is the codesnippet for three products to appear##
  <% @products.each do |product| %>
  <div class="col-sm-2 center-block " >

<%= link_to product_path (product) do %>
            <%= image_tag product.image.url(:thumb), class: "img-responsive" %>
        <% end %>

    <div class="product_description">

      <h5><%= link_to product.title, product %></h5>
    </div>
  </div>
<% end %>

И в моем products_controller.rb у меня есть код, я считаю, что проблема должна быть найдена в @products, но я не уверен, что это такое. Пожалуйста, может кто-нибудь посоветовать мне.

products_controller.rb

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


  def show
   @meta_title = "Concept Store #{@product.title}"
   @meta_description = @product.description
   @products = Product.all ###EDITED###
  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_usd, :price_isl, :image, :category_id, :stock_quantity, :label_id, :query, :slug)
  end
end

Мои модели Products и Categories имеют отношения

product.rb

class Product < ActiveRecord::Base
belongs_to :category
belongs_to :label

has_many :product_items, :dependent => :destroy

 extend FriendlyId
 friendly_id :title, use: [:slugged, :finders]

    validates :title, :description, presence: true
    validates :price_usd, :price_isl, numericality: {greater_than_or_equal_to: 0.01}
    validates :title, uniqueness: true

 has_attached_file :image, styles: { medium: "500x500#", thumb: "100x100#" }
 validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/
end

category.rb

class Category < ActiveRecord::Base

 has_many :products, :dependent => :nullify

 extend FriendlyId
 friendly_id :name, use: [:slugged, :finders]
end

person Slowboy    schedule 11.05.2017    source источник
comment
Я не думаю, что each_slice делает то, что вы думаете. Ознакомьтесь с документацией.   -  person coreyward    schedule 11.05.2017


Ответы (1)


Давайте разберем это:

@products = Category.joins(:products).where(:products => {:id => @product.image})
  • @products хорошо, предположительно это набор Product экземпляров
  • Category.joins(:products) уххх, возвращаются экземпляры Category
  • where(products: { id: @product.image }) подождите, отфильтруйте продукты с идентификатором, соответствующим @product.image, который якобы является строковым URL-адресом или путем к файлу.

Все вместе: @products = массив категорий со связанными продуктами, где числовой идентификатор соответствует определенной строке в конкретном продукте.

Я рекомендую вам ознакомиться с руководствами по Rails, уделяя особое внимание Основы ActiveRecord.

person coreyward    schedule 11.05.2017
comment
спасибо, я сильно усложнял. Я закончил тем, что просто сделал @products = Product.all, но мне нужно выяснить, как сделать так, чтобы только 3 изображения появлялись случайным образом. - person Slowboy; 11.05.2017
comment
stackoverflow.com/questions/2752231/ - person coreyward; 11.05.2017