控制器:
class GalleriesController < ApplicationController
def index
@galleries = Gallery.all
end
end
查看:
<% for gallery in @galleries %>
<%= image_tag(gallery.image.url(:medium)) %>
<% end %>
我有2个模特,照片属于Gallery,有许多照片。
我想在图库索引页面上的每个图库中显示图像(最好是随机而不是:第一个)。
我知道我的代码是错的,因为我没有描述从库中选择哪个图像,但我不知道如何做到这一点...我认为使用@photos = @galleries.photos.find(:first)
会起作用但是我得到了一个未定义的方法'照片'在控制器中。
答案 0 :(得分:3)
这适用于Rails 2 + MySQL
class Photos < ActiveRecord::Base
# for MySQL:
named_scope :random, lambda { |n| {:order => "RAND()", :limit => n || 1 }}
# for SQLite and PostgreSQL
named_scope :random, lambda { |n| {:order => "RANDOM()", :limit => n || 1 }}
end
然后你可以做类似
的事情gallery.photos.random[0]
gallery.photos.random
会随机返回1张照片,但它仍然会返回一个数组,这就是为什么需要[0]
来获取此数组的第一个元素的原因。你也可以gallery.photos.random.first
。
如果您想要多个随机图片,可以拨打gallery.photos.random(10)
以获得10张随机照片。
答案 1 :(得分:0)
@galleries是一个数组,所以你不能写@galleries.photos.find(:first)
,但你必须写
@galleries[0].photos.find(:first)
对于随机顺序尝试以下
<% for gallery in @galleries %>
<%= image_tag(gallery.photos.order('rand()')) %>
答案 2 :(得分:0)
你问@galleries数组的照片不起作用。您需要向Gallery的实例询问其照片。
所以在你的for循环中,以下内容适合你
<% for gallery in @galleries %>
<%= image_tag(gallery.photos.first.image.url(:medium)) %>
如果您想以随机顺序获得一张照片,那么您可以将Salils建议或者可能的方法添加到Gallery模型中,如下所示: -
def random_image()
photos.all[rand(photos.all.size)]
end
然后在你的foreach循环中,只需<%= image_tag(gallery.random_image) %>