Чтобы отсортировать несколько моделей вместе, сначала создайте коллекцию из двух:
@objects = @solrs + @messages
затем используйте [sort_by]
(https://apidock.com/ruby/Enumerable/sort_by):
@objects.sort_by &:created_at
-или- @objects.sort_by { |obj| obj.created_at }
Уверен, вы можете заключить это в одну строку, например:
@objects = (@solrs + @messages).sort_by &:created_at
[is_a?]
(https://apidock.com/ruby/Object/is_a%3F) позволит вам относиться к каждому из них индивидуально, этот вопрос так хорошо подходит к этому
* +1025 * Пример:
solr_controller.rb
def stats
@messages = Message.includes(:user).custom_display
@solrs = Solr.includes(:user).all
@objects = (@solrs + @messages).sort_by &:created_at
end
[.includes]
(https://apidock.com/rails/ActiveRecord/QueryMethods/includes) позволит вам получить доступ к связанному пользователю без повторного запроса к базе данных. Вот хорошая статья об этом.
если вы находитесь в / views / messages, настройте, если ваша файловая структура отличается
/ сообщения / stats.html.erb
<% @objects.each do |obj| %>
<% if obj.is_a? Solr %>
<%= render partial: 'solr', locals: { solr: obj } %>
<% else %>
<%= render partial: 'message', locals: { message: obj } %>
<% end %>
<% end %>
/ сообщения / _solr.html.erb
<div class="row msg_container base_receive">
<div class="col-xs-10 col-md-10">
<div class="messages msg_receive">
<p>
Disease <b> <%= solr.disease %> </b>
has been created with synonyms <b> <%= solr.synonym %> </b>
by <b> <%= solr.user.first_name %> <%= solr.user.last_name %> </b>
<br>
</p>
<time>
<%= solr.created_at.strftime("%d %b %4Y") %> •
<%= solr.created_at.strftime("%I:%M%p") %>
</time>
</div>
</div>
</div>
/ сообщения / _message.html.erb
<div class="row msg_container base_sent">
<div class="col-md-1 col-xs-1">
<p> <em> <%= message.user.first_name %>: </em> </p>
</div>
<div class="col-md-10 col-xs-10">
<div class="messages msg_sent">
<p> <%= message.body %> </p>
<time>
<%= message.created_at.strftime("%d %b %4Y") %> •
<%= message.created_at.strftime("%I:%M%p") %>
</time>
</div>
</div>
</div>