我已经研究了这个问题的答案了一段时间,但无法弄清楚。我正在尝试构建一个显示数据库中随机项的视图(我最终将通过按钮单击进行未来的实现)。我不知道什么是错的。
我有一个名为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文件夹截图:
我只是在我的智慧结束时这是令人沮丧的,因为我觉得这是一个非常简单的问题。任何建议或有用的资源将不胜感激。
答案 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