从SQL数据库中获取随机记录并显示它

时间:2015-08-12 21:52:33

标签: ruby-on-rails sqlite

我使用SQLite在Rails 4上,我有一个75,000引号的数据库。我想从这个数据库中获取一个随机记录(引用)并显示给用户查看。我环顾四周,但我在这里搜索过的方法还没有找到。这是抓取第一条记录并显示它的代码:

=if(mround(F10,10000) = mround(e10,10000),0,vlookup(.....

我也尝试了以下方法,但这会返回一个长字母数字值而不是引号。

<% Quote.limit(1).all.each do |quote| %>
<%= quote.quote %> :: <%= quote.author %> :: <%= quote.genre %>

谢谢!

1 个答案:

答案 0 :(得分:2)

在SQL调用中不要order by random()。这是非常低效的,因为您的数据库必须为每一行调用随机函数,为其赋值,然后对其进行排序。随着行数的增长,这变得非常慢。

你的第二种方法应该有效,是一种更好的解决方案。我用我自己的数据库尝试了它,它的工作原理。 rand_record将是Quote对象 - 而不是引用字符串本身。我会这样做:

在您的控制器操作中:

random_offset = rand(Quote.count - 1)
@random_quote = Quote.offset(random_offset).first

在您看来:

<%= @random_quote.quote %> :: <%= @random_quote.author %> :: <%= @random_quote.genre %>

我们从计数中减去一个的原因是,如果我们选择一个与Quote记录数相同的偏移量,那么我们对fetch的调用将为nil,因为查询的偏移量太多了。