Сортировка представлений с использованием данных между двумя таблицами - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь отсортировать данные в моем чате с данными из двух таблиц (вроде попытки создать место в журнале событий).

Это мой чат:

Чат/ Журнал событий

Я хочу отсортировать синие и зеленые поля по дате / времени.Вот код, который я хочу отсортировать:

Код

Можете ли вы подсказать мне, как этого добиться?

РЕДАКТИРОВАТЬ Обновленный код:

Обновленный код 3 апреля Изображение

stats.html.erb file

<%
    @objects = (@solrs + @messages).sort_by &:created_at
%>

<% @objects.each do |obj| %>
  <% if obj.is_a? Solr %>
    <!-- Solrs Partial -->
    <%= render 'messages/solr' %>
  <% else %>
   <!-- Messages Partial -->
  <%= render @messages %>
  <% end %>
<% end %>  

Code Inside Solrs Частично

<% @solrs.each do |solr| %>

    <div class="row msg_container base_receive">  
        <div class="col-xs-10 col-md-10">
            <div class="messages msg_receive">
                <p class="">

                    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>

<% end %>  

Код Inside Message Частично

<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>

solr_controller file

def stats
        @messages = Message.custom_display
        @message = Message.new
        @solrs = Solr.all
        @users = User.all 
 end

1 Ответ

0 голосов
/ 29 марта 2019

Чтобы отсортировать несколько моделей вместе, сначала создайте коллекцию из двух:

@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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...