在ROR app中显示来自数据库的多个回形针图像。很多关系

时间:2017-08-03 17:14:13

标签: ruby-on-rails ruby foreign-keys paperclip relationship

我对ROR很新,我正在构建一个ROR应用程序,每个产品都可以有很多图像。 我使用paperclip进行图片上传。

为此,我向应用添加了image.rb模型,现在又添加了product.rb模型has_many :imagesaccepts_nested_attributes_for :images

这一切都可以解决问题。

问题是product.rb模型有这种关系belongs_to :categorybelongs_to :label

category以及label has_many :products

在我添加image.rb模型之前,每个产品都附有一张图片。 在index.html.erb页面,用户可以看到排列的类别,每个类别中每个产品的最新上传图片作为每个类别的正面图片。

以下是我在添加index.html.erb模型之前在image.rb显示类别的剪辑。

<div class="container-fluid">

        <% @products.each_slice(3) do |products_group| %>
        <div class="row">
          <% products_group.each do |category, products| %>

                <% products.each_with_index do |product, index| %>
                    <% if index == 0 %>
                        <div class="col-lg-4 col-sm-6 col-xs-12 center-block " >

                        <%= link_to category_path (category), { :method => 'GET' } do %>
                            <%= image_tag product.image.url(:medium), class: "img-responsive" %>
                        <% end %>
                <div class="caption">
                    <p class="category-name" ><%= product.category.name %></p>
                 </div> 
                <% end %>
                <% end %>
                </div> 
            <% end %>
            </div>
        <% end %>

</div>

pages_controller.rb中有这段代码:

 def index   
   @products = Product.all.order(created_at: :desc).group_by(&:category_id)
 end

如上面的代码示例所示,我根据类别对产品进行分组,然后我会在索引页面上显示每个类别都有任何产品。索引页面上显示的类别仅显示每个类别中最新上传的产品。

但是现在我拥有image.rb模型来处理照片上传后,我需要一种方法在索引页面上显示相同的结果,但是当用户点击某个类别时,他将被带到该类别页面。

这是一个问题,因为现在图像已经绑定到image.rb模型而不再绑定到product.rb模型了。

我可以在image.rb模型中看到上传的图片,但我不确定如何调整关系而不会破坏所有内容。

有人可以帮帮我吗?

以下是涉及的模型:

product.rb

class Product < ActiveRecord::Base
  acts_as_list :scope => [:category, :label]
  belongs_to :category
  belongs_to :label

  has_many :images
  accepts_nested_attributes_for :images
  has_many :product_items, :dependent => :destroy
end

category.rb

class Category < ActiveRecord::Base

  has_many :products, :dependent => :nullify

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

end

image.rb

class Image < ActiveRecord::Base

  belongs_to :product

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

end

1 个答案:

答案 0 :(得分:3)

在每个产品中有一个图像之前。现在,您在产品中有许多图像。我想你只需要在image_tag之前迭代:

在:

<%= image_tag product.image.url(:medium), class: "img-responsive" %>

后:

<% product.images.each do |image_model| %>
  <%= image_tag image_model.image.url(:medium), class: "img-responsive" %>
<% end %>

如果你想要显示第一张照片:

<% if product.images.first %>
  <%= image_tag product.images.first.image.url(:medium), class: "img-responsive" %>
<% end %>