ruby-on-rails - 使用两个表之间的数据对视图进行排序
问题描述
我正在尝试使用来自两个表的数据对我的聊天框中的数据进行排序(有点尝试创建事件日志位置)。
这是我的聊天框:
我想根据日期/时间对蓝色和绿色框进行排序。这是我要排序的代码:
你能指导我如何实现这一目标吗?
编辑 更新代码:
stats.html.erb 文件
<%
@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 %>
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 %>
代码内部消息部分
<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 文件
def stats
@messages = Message.custom_display
@message = Message.new
@solrs = Solr.all
@users = User.all
end
解决方案
要将多个模型排序在一起,首先创建两个模型的集合:
@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)将让您单独对待每个人,这个 SO 问题很好地解决了这个问题
例子:
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 中,如果您的文件结构不同,请进行调整
/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 %>
/messages/_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>
/messages/_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>
推荐阅读
- python - 使用参数作为变量错误Python
- json - Dart 未来的 HttpCLientRequest 返回 Null
- virtualization - 带有 U-Boot 的 QEMU 使用 100% 的 CPU
- hibernate - Corda:如何实现持久化到 H2 的状态数据之间的层次关系
- grafana - 可以使用 API 将警报添加到仪表板上的 Grafana 面板吗?
- excel - Excel 2016 VBA - 创建标签并使用按钮将其传输到 Word 文档?
- c++ - ESP8266 WebServer 发送空响应或未完成响应
- python - 返回 lambda 节点 < 节点
- css - 打印 CSS cm 尺寸时在不同打印机上的不同结果
- sql-server - 何时将安全性应用于查询