1

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

我有一个带有内容和标题属性的帖子模型。假设我出于某种原因想获取随机帖子(内容和标题),我该如何在 ruby​​ 中进行操作。提前致谢。

4

5 回答 5

4

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

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

例如,一个名字:

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

或电子邮件

Faker::Internet.email

除了这个gem,如果你想很容易生成mock模型,我推荐gem Factory Girl

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

于 2013-03-03T11:01:16.667 回答
1

自第一个回答一个不清楚的问题以来,发布另一个答案。

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

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

Post.all.sample 

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

于 2013-03-03T17:36:23.733 回答
1

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

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

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

该解决方案还具有高性能和便携性。

于 2013-09-29T11:10:55.907 回答
0

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

对于 postgresql,您可以使用:

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

获取一篇随机帖子。

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

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

所以如果你改变你的 RDBMS,你只需要改变范围。

于 2013-03-03T17:00:40.557 回答
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

使用 Kent Fedric 的方式生成随机字符串

于 2013-03-03T10:23:39.800 回答