Получение случайной записи из набора результатов - PullRequest
1 голос
/ 15 мая 2011
@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

Я получаю следующую ошибку: NoMethodError в PicturesController # next закрытый метод `rand 'вызвал для []: ActiveRecord :: Relation

Вместо

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

Я тоже пробовал

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

и получите эту ошибку вместо: ActiveRecord :: StatementInvalid в PicturesController # next Mysql2 :: Ошибка: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '0,6704131293122307' в строке 1: SELECT pictures. * FROM pictures LIMIT 1 OFFSET 0.6704131293122307

Что я делаю не так или как мне получить случайную запись из массива результатов? Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 15 мая 2011

преобразовать результат ранда в целое число следующим образом:

@picture = Picture.offset(rand(Picture.count).to_i).first
2 голосов
/ 15 мая 2011

В ruby ​​1.9.2 вы можете просто:

@picture.sample
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...