Railsでランダムなレコードをフェッチして、ホームページにレンダリングしようとしています。
コンテンツとタイトルの属性を持つ投稿モデルがあります。なんらかの理由でランダムな投稿(コンテンツとタイトル)を取得したいとしましょう。どうすればルビーでそれを実行できますか。前もって感謝します。
Railsでランダムなレコードをフェッチして、ホームページにレンダリングしようとしています。
コンテンツとタイトルの属性を持つ投稿モデルがあります。なんらかの理由でランダムな投稿(コンテンツとタイトル)を取得したいとしましょう。どうすればルビーでそれを実行できますか。前もって感謝します。
この宝石が便利だと思うかもしれません: Faker
何らかの意味を持つランダムな文字列を生成できます。
たとえば、名前:
Faker::Name.name => “Bob Hope”
または電子メール
Faker::Internet.email
このgemに加えて、モックモデルを非常に簡単に生成できるようにしたい場合は、gem Factory Girlをお勧めします
モデルのファクトリを作成できるため、ランダムな属性を持つモデルをすばやく生成できます。
最初の回答が不明確な質問に回答して以来、別の回答を投稿しています。
@m_x が言ったようRANDOM()
に、SQL に使用できます。
すべてのデータセットをロードしても構わない場合は、Ruby でも実行できます。
Post.all.sample
これにより、すべての投稿から 1 つのランダムなレコードが選択されます。
残念ながら、ランダム レコードを取得するためのデータベースに依存しない方法がないため、ActiveRecord はそれを実装していません。
postgresql の場合は、次を使用できます。
Post.order( 'RANDOM()' ).first
1 つのランダムな投稿を取得します。
さらに、私は通常、このためのスコープを作成します:
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 の方法を使用してランダムな文字列を生成する