显示随机数据库项目以查看 - Rails

时间:2014-11-18 19:12:04

标签: ruby-on-rails random view controller

我已经研究了这个问题的答案了一段时间,但无法弄清楚。我正在尝试构建一个显示数据库中随机项的视图(我最终将通过按钮单击进行未来的实现)。我不知道什么是错的。

我有一个名为Answers的脚手架,只显示文字。在我的Answers Controller中,我构建了一个名为random的自定义方法:

def index
  @answers = Answer.all
end

def show
end

def random
  # @randitem = @items[rand(items.count)] 
  @randanswer = Answer.random_answer
end

在我的模特中:

  class Answer < ActiveRecord::Base
    def self.random_answer
    Answer.order("RAND()").first
  end
end

最后,在我的观点/ random.html.erb中:

<!--Doesn't work-->
<%= link_to @randanswer.answer_response, link_to_answer(@randanswer) %>

a文件夹截图: enter image description here

我只是在我的智慧结束时这是令人沮丧的,因为我觉得这是一个非常简单的问题。任何建议或有用的资源将不胜感激。

2 个答案:

答案 0 :(得分:1)

只是,找到偏移量

# Rails 4
def self.random_answer
  offset = rand(Answer.count)
  Answer.offset(offset).first
end

# Rails 3
def self.random_answer
  offset = rand(Answer.count)
  Answer.first(:offset => offset)
end

我希望它有所帮助

编辑:

由于Answer.order("RAND()").first可以正常使用MySQL,所以你可以将Answer.order("RANDOM()").first与PostgreSQL一起使用,或者使用偏移你可以放心地使用它。

答案 1 :(得分:0)

在我看来,一种更简单的方法是使用Ruby的示例方法:

def self.random_answer
  Answer.all.sample
end

OR

def self.random_answer
  Answer.order(:column_name).sample
end

更好的是,我会删除模型的random_answer方法,并将AnswersController方法定义为:

def random
  @randanswer = Answer.all.sample
end

Ruby Doc参考:http://www.ruby-doc.org/core-2.1.5/Array.html#method-i-sample