通过关联的Rails顺序被忽略

时间:2018-03-13 22:39:50

标签: ruby-on-rails ruby-on-rails-5

我尝试按两列排序,一个是被忽略的关联列,未实现。是否可以通过循环中的关联进行排序?

循环

<% @info.each do |data| %>
 <% data.selections.size.times do |i| %>
  <% unless data.progressions.blank? %>
    <% data.progressions.order_scope.in_groups_of(7)[i].each_with_index do |e, index| %>
    <% if index == 0 %>
      <%= e.selection.name rescue 0 %>
    <% end %>
    <%= Time.at(e.assessment.date/1000).strftime("%d/%m/%Y") rescue 0 %>
  <% end %>
  <% end %>
 <% end %>
<% end %>

模型

belongs_to :selection, primary_key: 'selection_id', foreign_key: 'selection_id', optional: true
belongs_to :assessment, primary_key: 'assessment_id', optional: true

scope :order_scope, -> { order('selection_id').joins(:assessment).order('assessments.date') }

这是前一代码输出的输出,它似乎是随机放置日期而不是按顺序排列。

|name 1|     0    |0|0|0|02/01/2018|15/01/2018|23/01/2018|

|name 2|28/02/2018|0|0|0|02/01/2018|15/01/2018|21/01/2018|

2 个答案:

答案 0 :(得分:0)

我认为这是因为进度可能具有相同的selection_id,当您订购它们时,结果可能会有所不同。尝试在order中添加其他唯一属性/列,例如created_atid,以便订单始终是唯一的。

scope :order_scope, -> { order('selection_id, created_at').joins(:assessment).order('assessments.date') }

答案 1 :(得分:-1)

那么,您尝试做的基本上是按2列排序并使用结果输出一些内容? 是的,可以做到。 事实是,我建议使用SQL代替,因为在Ruby方法中,它的可读性要低得多。

在ruby中执行此查询:

SELECT * FROM selections s JOIN assessments a ON s.selection_id = a.selection_id ORDER BY a.date [DESC], s.selection_id [DESC]

[DESC]是可选的关键字设置顺序,以降序方式(默认为升序)。

结果应该是您正在寻找的。