【问题标题】:Creating Gallery Page/Nested Resource创建图库页面/嵌套资源
【发布时间】:2013-01-05 05:09:32
【问题描述】:

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

类GalleriesController

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

end

默认显示 @gallery = Gallery.find(参数[: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

任何帮助将不胜感激。

【问题讨论】:

  • 赛斯,看来你是新来的。欢迎。您的问题有一些格式问题,我不太确定您要完成什么。模型及其关系是什么?你说一个画廊 has_many Photos。但你也提到了专辑。专辑在哪里发挥作用?
  • 您说“我正在尝试将第一张图片从每个 gallery_id 拉到图库页面”。然后你说“我得到的是每张专辑的第一个图像加载。”对我来说,它读起来就像你得到了你想要的。请澄清。谢谢。
  • 对不起,我不是指专辑,是指画廊。发生的事情是,我将 photo_id 1 作为每张专辑的封面。

标签: ruby ruby-on-rails-3


【解决方案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。即gallery.photos.sample

【讨论】:

    【解决方案2】:

    你必须使用关系,这是你需要的。我尝试修复代码并添加了 cmets。

    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>
    

    【讨论】:

    • 谢谢,但是,此代码输出画廊索引上画廊的所有照片。我想我需要找到一种方法来找到 photo.gallery_id == gallery_id 的第一张图片????
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2020-11-10
    • 1970-01-01
    • 2021-07-10
    • 2013-10-16
    相关资源
    最近更新 更多