ruby-on-rails - resultado - random programa
Mostrar un elemento de base de datos aleatorio para ver: rieles (2)
Investigué la respuesta a esta pregunta por un tiempo y no puedo entenderlo. Intento crear una vista que muestre un elemento aleatorio de la base de datos (eventualmente haré una implementación futura para hacerlo mediante el botón-clic). No tengo idea de lo que está mal.
Tengo un andamio llamado Answers que solo muestra texto. En mi controlador de respuestas, construí un método personalizado llamado random:
def index
@answers = Answer.all
end
def show
end
def random
# @randitem = @items[rand(items.count)]
@randanswer = Answer.random_answer
end
En mis modelos:
class Answer < ActiveRecord::Base
def self.random_answer
Answer.order("RAND()").first
end
end
Finalmente, en mi opinión / random.html.erb:
<!--Doesn''t work-->
<%= link_to @randanswer.answer_response, link_to_answer(@randanswer) %>
La captura de pantalla de una carpeta:
Estoy a punto de ponerme nervioso, lo cual es frustrante porque siento que este es un problema muy simple. Cualquier sugerencia o recurso útil sería apreciado.
Solo, encuentra con offset
# 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
Espero que ayude
Editado:
Dado que Answer.order("RAND()").first
funciona bien con MySQL, también puede usar Answer.order("RANDOM()").first
con PostgreSQL, o con offset puede hacerlo con confianza, funciona.
Un enfoque más simple, en mi opinión, es usar el método de muestra de Ruby:
def self.random_answer
Answer.all.sample
end
O
def self.random_answer
Answer.order(:column_name).sample
end
Mejor aún, eliminaría el método random_answer
su modelo y definiría el método AnswersController
como:
def random
@randanswer = Answer.all.sample
end
Referencia de Ruby Doc: http://www.ruby-doc.org/core-2.1.5/Array.html#method-i-sample