从一组结果中获取随机记录

时间:2011-05-14 21:14:04

标签: ruby-on-rails activerecord

@user_id = params[:user_id]
@picture = Picture.scoped
if @user_id.present?
    @picture = @picture.where("user_id not in (?)", params[:user_id])
end
@picture = @picture.rand(@picture.count).first

respond_to do |format|
    format.html { redirect_to(@picture) }
    format.json { render :json => @picture }
end

我收到以下错误: PicturesController#next中的NoMethodError 私有方法`rand'调用[]:ActiveRecord :: Relation

而不是

@picture = @picture.rand(@picture.count).first

我也试过

@picture = Picture.offset(rand(Picture.count)).first

并改为收到此错误: 在PictureController#next 中的ActiveRecord :: StatementInvalid Mysql2 ::错误:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“0.6704131293122307”附近使用正确的语法:SELECT pictures。* FROM pictures LIMIT 1 OFFSET 0.6704131293122307

我做错了什么,或者如何从结果数组中获取随机记录?提前谢谢。

2 个答案:

答案 0 :(得分:3)

将rand结果转换为整数,如下所示:

@picture = Picture.offset(rand(Picture.count).to_i).first

答案 1 :(得分:2)

在ruby 1.9.2中,您可以这样做:

@picture.sample