tacky4
@tacky4 (Tacky4 .)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Rails】where検索で得た投稿(@posts)をランダムに並べ替えたい

解決したいこと

都市名(nameタグ=city_name)で検索した投稿(@posts)をランダムに並べ替えたい。

状況

都市別に投稿を集める機能を作っています。
投稿を集めた後、投稿を表示する際ランダムに並べ替えたいと考えています。
@post.shuffleなどではうまく行かず、自分の知識ではうまく並べ替えることができません。
もし解決策をご存じの方がいれば、教えていただけないでしょうか。

問題のコード(Postコントローラ)

posts_controller.rb
#都市名を使ってPostモデルを検索
def search
  if params[:city_name] != nil
    @posts=Post.where(city_name: params[:city_name])
  else 
    @posts=Post.all
  end
 
 
 #@postsをシャッフルする。
 ???

end


自分で試したこと

@postsのidを集めて配列に直し、その後ランダムに並べ替えるということも考えたのですが、こちらも方法が分かりませんでした。
どなたかよい方法をご存じの方がいれば教えていただきたいです。

0

1Answer

@posts = @posts.to_a.shuffle

としてください。

元々の @postsActiveRecord::Relation オブジェクトで、配列風のメソッドを持ちますが Array ではないためシャッフルできません。 to_aArray に変換することで shuffle を呼べるようになります。

0Like

Your answer might help someone💌