如何在rails中获取随机记录?

时间:2013-03-03 10:06:25

标签: ruby-on-rails ruby

我正在尝试在rails中获取随机记录,以在我的主页中呈现。

我有一个包含内容和标题属性的帖子模型。让我说我想出于某种原因随机发帖(内容和标题),我怎样才能在红宝石中进行。提前谢谢。

5 个答案:

答案 0 :(得分:4)

你可能会发现这个宝石很方便:Faker

它允许生成具有某种含义的随机字符串。

例如,名称:

Faker::Name.name => “Bob Hope”

或电子邮件

Faker::Internet.email

除了这个gem之外,如果你想非常容易地生成模拟模型,我推荐gem Factory Girl

它允许您为模型创建工厂,您可以快速生成具有随机属性的模型。

答案 1 :(得分:1)

我知道这是一个老问题,但由于没有选择答案,回答它可能对其他用户有帮助。

我认为最好的方法是在Ruby中生成随机偏移并在Active Record语句中使用它,如下所示:

Thing.limit(1).offset(rand(Thing.count)).first

此解决方案也具有高性能和便携性。

答案 2 :(得分:0)

在你的帖子控制器中,

def create
  @post = Post.new(params[:post])
  if you_want_some_random_title_and_content
    title_length = 80 #choose your own
    content_length = 140 #choose your own
    @post.title = (0...title_length).map{(65+rand(26)).chr}.join
    @post.content = (0...content_length).map{(65+rand(26)).chr}.join
  end

  if @post.save
    redirect_to @post
  else
    render 'new'
  end
end

Using Kent Fedric's way生成随机字符串

答案 3 :(得分:0)

遗憾的是,没有与数据库无关的方法来获取随机记录,因此ActiveRecord没有实现任何记录。

对于postgresql,您可以使用:

Post.order( 'RANDOM()' ).first

要获取一个随机帖子。

另外,我通常会为此创建一个范围:

class Post < ActiveRecord::Base
  scope :random_order, ->{ order 'RANDOM()' }
end

因此,如果您更改RDBMS,则只需更改范围。

答案 4 :(得分:0)

自第一个回答一个不明确的问题以来,发布了另一个答案。

正如@m_x所说,您可以将RANDOM()用于SQL。

如果您不介意加载所有数据集,也可以在ruby中执行:

Post.all.sample 

这将从所有帖子中选择一个随机记录。