1

我正在尝试创建一个链接到相册的画廊页面。相册工作正常,但我正在尝试将每个 gallery_id 中的第一张图片拉到图库页面。我有一个画廊有很多照片,照片属于画廊。我得到的是每张专辑的第一个图像加载。

类画廊控制器 < 应用控制器

def index
@gallery = Gallery.paginate(page: params[:page]).per_page(6)
@photos = Photo.find(:all, :limit => 1)

end

def show @gallery = Gallery.find(params[:id]) @photos= @gallery.photos.all end end

画廊/index.html。

<% provide(:title, 'Photo Galleries') %>.

<div id="galleries">
    <%= will_paginate @gallery %>
    <ul class="thumbnails">
        <% @gallery.each do |gallery| %>
            <li class="span4">
                <div class="thumbnail">
                    <% @photos.each do |photo| %>
                        <%= link_to image_tag(photo.image), gallery_path(gallery)%>
                    <% end %>
                    <h4><%=  gallery.name %></h4>
                </div>
            </li>
        <% end %>
    </ul>
</div>

路线

  resources :galleries, :has_many => :photos

任何帮助,将不胜感激。

4

2 回答 2

1

很确定这是你想要的:

class GalleriesController < ApplicationController
    def index
        @gallery = Gallery.paginate(page: params[:page]).per_page(6)
    end
end

_

# galleries/index.html

<% provide(:title, 'Photo Galleries') %>

<div id="galleries">
    <%= will_paginate @gallery %>
    <ul class="thumbnails">
        <% @gallery.each do |gallery| %>
            <li class="span4">
                <div class="thumbnail">
                        <%= link_to image_tag(gallery.photos.first.image), gallery_path(gallery) %>
                    <h4><%=  gallery.name %></h4>
                </div>
            </li>
        <% end %>
    </ul>
</div>

您的问题是,在您的索引操作中,您抓取了所有图像,无论它们属于哪个画廊,然后您在视图中循环浏览所有图像并显示它们。

由于您的关联(画廊 has_many 照片),您可以使用 访问画廊的照片gallery.photos

在我的示例中,我为每个画廊显示第一张图片: gallery.photos.first

如果您想要来自相关画廊的随机图像,您可以使用sample. IEgallery.photos.sample

于 2013-01-10T02:05:35.680 回答
0

你必须使用关系,这是你在这里需要的。我试图修复代码并添加注释。

class GalleriesController < ApplicationController
def index
  @gallery = Gallery.paginate(page: params[:page]).per_page(6)
  # You don't need the photos. You have to access them through gallery,
  # or you will get always all photos independent of the gallery.
  #@photos = Photo.find(:all, :limit => 1)
end

这是您正在寻找的视图

# galleries/index.html.erb
<% provide(:title, 'Photo Galleries') %>.

<div id="galleries">
    <%= will_paginate @gallery %>
    <ul class="thumbnails">
        <% @gallery.each do |gallery| %>
            <li class="span4">
                <div class="thumbnail">
                    <% gallery.photos.each do |photo| %>
                        <%= link_to image_tag(photo.image), gallery_path(gallery)%>
                    <% end %>
                    <h4><%=  gallery.name %></h4>
                </div>
            </li>
        <% end %>
    </ul>
</div>

如果您只想显示每个画廊的第一张图片,则必须以这种方式更改视图:

# galleries/index.html.erb
<% provide(:title, 'Photo Galleries') %>.

<div id="galleries">
    <%= will_paginate @gallery %>
    <ul class="thumbnails">
        <% @gallery.each do |gallery| %>
            <li class="span4">
                <div class="thumbnail">
                    <%= link_to image_tag(gallery.photos.first.image), gallery_path(gallery)%>
                    <h4><%=  gallery.name %></h4>
                </div>
            </li>
        <% end %>
    </ul>
</div>
于 2013-01-06T20:03:37.783 回答