Rails, как случайным образом выбрать строку в таблице? - PullRequest
2 голосов
/ 10 марта 2011

Как мне случайно выбрать строку в таблице?

Пример моей таблицы:

name   age 
Lars   24
Grete  56
Hans   56

Я хочу случайно выбрать имя.

Пример:

@randomname = Model.where(:name 'Random')

И как мне выбрать только 1 случайное имя каждый день. Это я могу использовать в качестве мгновенной переменной в поле зрения.

Ответы [ 4 ]

4 голосов
/ 10 марта 2011
@randomname = Model.order('rand()').limit(1).first.name
3 голосов
/ 10 марта 2011

Случайный столбец в Rails 3 просто:

Model.columns.sample.name
1 голос
/ 10 марта 2011

Если вы хотите получить случайный объект 1 в день, значит, вы должны его где-то хранить.Вы можете сохранить его:

  • в отдельном файле
  • в отдельной модели
  • в той же модели добавить поле rndm

Позволяет реализоватьпоследний.Это довольно легко.Представь, что твой Model называется User.Во-первых, давайте добавим новое поле даты rndm:

rails g migration add_rndm_to_user rndm:date
rake db:migrate

Теперь нам нужно добавить некоторые методы к вашей User модели

class User < ActiveRecord::Base
  def self.random
    rndm = find_by_rndm Date.today
    unless rndm
      update_all :rndm => nil
      rndm = self.order('rand()').first
      rndm.update_attribute :rndm, Date.today
    end
    rndm
  end
end

, чтобы теперь вы могли вызывать User.randomот вашего контроллера

0 голосов
/ 10 марта 2011

У меня есть некоторый код Rails 2, который показывает идею, которую я думаю, и ее очень легко преобразовать в rails 3:

random_monsters = self.find(:all, :conditions=>["level > 0 and level < ? and monster_type='monster'", user_level+2])
random_monster = random_monsters[rand(random_monsters.length)]

Я также видел, как кто-то в SO предложил способ смещения вроде:

offset = rand(Model.count)
rand_record = Model.first(:offset => offset)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...