随机从用户模型红宝石中挑选照片

时间:2013-05-15 13:15:54

标签: ruby ruby-on-rails-3 model

我的ruby on rails应用程序的架构如下。我目前正在填写我的主页,并希望从随机现有用户中随机选择照片以在主页上显示。

我在我的家庭控制器中尝试过很多东西,似乎无法正确使用......

class HomeController < ApplicationController

  def index
    @featured = User.find(:all, :limit => 4, :order => 'RANDOM()')
    @users = User.find(:all)
    user_count = User.count()
    offset = rand(0..(user_count-1))
    @my_user = User.find(:all, :limit => 1, :offset => offset )
  end
end

我尝试过以下操作但没有成功:

@photo = User.find(:order => 'RANDOM()').photo

@user = User.find(:all, :limit => 1, :order => 'RANDOM()')
@photo = Photo.find(@user)

我遇到这样的错误:无法找到id为6的照片

如果不指向零位置/不存在的照片,我该如何处理?

ActiveRecord::Schema.define(:version => 20130513143229) do

  create_table "photos", :force => true do |t|
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.string   "image"
    t.integer  "user_id"
  end

  create_table "roles", :force => true do |t|
    t.string   "name"
    t.integer  "resource_id"
    t.string   "resource_type"
    t.datetime "created_at",    :null => false
    t.datetime "updated_at",    :null => false
  end

  create_table "users", :force => true do |t|
    t.string   "email",                  :default => "", :null => false
    t.string   "encrypted_password",     :default => "", :null => false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          :default => 0
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at",                             :null => false
    t.datetime "updated_at",                             :null => false
    t.string   "name"
    t.string   "avatar"
    t.string   "image"
  end

2 个答案:

答案 0 :(得分:1)

您应该可以使用offset子句来完成此操作。

首先,获取您拥有的用户总数。

user_count = User.count()

然后得到0和这个数字之间的随机数 - 1。

offset = rand(0..(user_count - 1))

然后选择偏移量以获得随机用户

my_user = User.find(:all, :limit => 1, :offset => offset)

要从随机用户处获取随机图片子集,请使用相同的步骤,但需要注意几点。将:limit更改为您想要的图片数量,确保您的随机偏移量为number_of_pictures - picture_limit,并确保在计算图片时,您只计算要从中选择的子集({{1 }})。这不是完全随机的,因为您获得的图片子集将按照数据库想要的顺序排列,至少子集将从随机位置开始,因此该集合通常应该是不同的。

答案 1 :(得分:0)

好的,在斯科特的帮助下......我找到了一个完美的解决方案......

一个问题是从家庭的观点/索引中调用特定照片。

在主页上查看图像的正确调用如下:

<%=link_to @my_user[0].name, @my_user[0] %>
<%= image_tag @fphoto[0].image_url(:thumb) if @fphoto[0].image? %>

我有一张随机图片......

class HomeController < ApplicationController

  def index
    @featured = User.find(:all, :limit => 4, :order => 'RANDOM()')
    @users = User.find(:all)
    user_count = User.count()
    offset = rand(0..(user_count-1))
    @my_user = User.find(:all, :limit => 1, :offset => offset )
    picture_count = Photo.count(params[:user_id => @my_user[0].id])
    poffset = rand(0..(picture_count - 1))
    @fphoto = Photo.find(:all, :limit => 1, :offset => poffset )

  end
end