Rails如何在表中随机选取一行?

时间:2011-03-10 18:38:17

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

如何随机选择表格中的行?

我的表格示例:

name   age 
Lars   24
Grete  56
Hans   56

我想随机选择一个名字。

示例:

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

我如何每天只挑选一个随机名称。我可以在视图中用作即时变量。

4 个答案:

答案 0 :(得分:4)

@randomname = Model.order('rand()').limit(1).first.name

答案 1 :(得分:3)

Rails 3中的随机列只是:

Model.columns.sample.name

答案 2 :(得分:1)

如果你想每天获得随机对象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

答案 3 :(得分:0)

我有一些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)