创建图库页面/嵌套资源



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

类galliescontroller <程序控制器>

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

def表演@gallery = Gallery.find(params[:id])@photos = @gallery.photos.all结束

结束

画廊/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

很确定这就是你想要的:

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>

你的问题是,在你的索引行动,你抓住所有的图像,不管他们属于什么画廊,然后你循环通过所有他们在你的视图和显示它们。

由于您的关联(gallery has_many photos),您可以使用gallery.photos访问一个图库的照片。

在我的示例中,我显示每个图库的第一张图像:gallery.photos.first

如果你想要一个随机的图像从画廊的问题,你可以使用sample。即gallery.photos.sample

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

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>

相关内容

  • 没有找到相关文章

最新更新