私はRails 5のアプリケーションで3つのアクティブレコードの配列をマージしようとしています。ホームページにジョブ、フォーラムスレッド、ブログを集めています。3つのアクティブなレコードの配列をマージする
I次のコードを持っている:
application_controller.rb
def home
@blogs = Blog.limit(6)
@jobs = Job.where(approved: true).limit(6)
@forum_threads = ForumThread.includes(:forum_posts).limit(6)
@everything = @blogs + @jobs + @forum_threads
end
home.html.erb
<% @everything.sort_by(&:created_at).reverse.each do |item| %>
<% if item.is_a?(Job) %>
<%= render partial: "application/partials/home_job", locals: {item: item} %>
<% elsif item.is_a?(ForumThread) %>
<%= render partial: "application/partials/home_forum", locals: {item: item} %>
<% elsif item.is_a?(Blog) %>
<%= render partial: "application/partials/home_blog", locals: {item: item} %>
<% end %>
<% end %>
私がいる問題は、このコードは、日付順にレコードを表示しないことですcreated_by
の代わりに、無作為な日から始めて、むしろランダムなジョブ、フォーラムスレッド、ブログのコレクションを持っています。
新しいジョブを追加すると、/home
ページに表示されたコレクションには表示されません。しかし、データベースからすべてのレコードを削除して新しいレコードを追加すると、コードはうまく動作し、予想通りの動作で正しい順序で投稿を表示します。
実稼働環境に既に存在するレコードをすべて削除することができないため、私はこのコードをライブヘロクにプッシュできません。ほとんどの場合、クリアする必要のあるキャッシュがあります。誰が何が起こっているのか分かっていますか?
原則として良いです。私は 'Blog.order(created_at::desc).limit(6)'を提案します。そうでなければ、注文の前に限度が与えられ、最新のものは含まれません。 – SteveTurczyn
これを行うと、3つの異なるコレクションがグループ化されます。だから、すべてのブログ記事はお互いに隣り合っていて、隣同士の仕事は...私はそれらをすべて一緒にして、ソートしてください。 – BillyBib
いいえ、あなたはまだ@everything、次に 'sort_by' ... @KcUS_unico答えはあなたが正しいレコードを最初に得ることを保証します。 – SteveTurczyn