我的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
答案 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