我正在尝试在 rails 中获取随机记录,以在我的主页中呈现。
我有一个带有内容和标题属性的帖子模型。假设我出于某种原因想获取随机帖子(内容和标题),我该如何在 ruby 中进行操作。提前致谢。
我正在尝试在 rails 中获取随机记录,以在我的主页中呈现。
我有一个带有内容和标题属性的帖子模型。假设我出于某种原因想获取随机帖子(内容和标题),我该如何在 ruby 中进行操作。提前致谢。
你可能会发现这个宝石很方便:Faker
它允许生成具有某种含义的随机字符串。
例如,一个名字:
Faker::Name.name => “Bob Hope”
或电子邮件
Faker::Internet.email
除了这个gem,如果你想很容易生成mock模型,我推荐gem Factory Girl
它允许您为模型创建工厂,因此您可以快速生成具有随机属性的模型。
自第一个回答一个不清楚的问题以来,发布另一个答案。
正如@m_x 所说,您可以RANDOM()
用于 SQL。
如果您不介意加载所有数据集,也可以在 ruby 中进行:
Post.all.sample
这将从所有帖子中随机选择一个记录。
我知道这是一个老问题,但由于没有选择答案,回答它可能对其他用户有帮助。
我认为最好的方法是在 Ruby 中生成一个随机偏移量并在您的 Active Record 语句中使用它,如下所示:
Thing.limit(1).offset(rand(Thing.count)).first
该解决方案还具有高性能和便携性。
不幸的是,没有与数据库无关的方法来获取随机记录,因此 ActiveRecord 没有实现任何方法。
对于 postgresql,您可以使用:
Post.order( 'RANDOM()' ).first
获取一篇随机帖子。
此外,我通常为此创建一个范围:
class Post < ActiveRecord::Base
scope :random_order, ->{ order 'RANDOM()' }
end
所以如果你改变你的 RDBMS,你只需要改变范围。
在您的后期控制器中,
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 的方式生成随机字符串