Rails 4 - 排序范围

Rails 4 - ordering scopes

我正在尝试在 Rails 4.

中制作一个应用程序

我的资格模型中有两个范围:

scope :completed, ->{ where(pending: !true) }
scope :pending, -> { where(pending: true) }

我试图在我看来列出它们(最新的在前)。

我有这个视图文件:

<% Qualification.pending.sort_by.year_earned.asc.each do |qualification| %>
  <div class="row">
    <div class="col-md-12">
      <div class="profilequalifications">
        <%= qualification.current_study  %>
      </div>    
    </div>  
  </div>
<% end %>

<% Qualification.completed.sort_by(&:year_earned).each do |qualification| %>
  <div class="row">
    <div class="col-md-12">
      <div class="profilequalifications">
        <%= qualification.completed_award  %>
      </div>    
    </div>  
  </div>
<% end %>   

第二个索引有效 - 但顺序错误。

第一个索引 - 我已经尝试了表达式的一百万个变体,但找不到一个不会抛出错误的变体。

我已经尝试了上面的每一个和下面的(每个都是我在这个网站上找到的例子):

<% Qualification.pending.sort_by(&:year_earned).reverse_order.each do |qualification| %>

<% Qualification.pending.sort_by(&:year_earned.reverse).each do |qualification| %>

<% Qualification.pending.sort_by('&:year_earned ASC').each do |qualification| %>


<% Qualification.pending.sort_by('year_earned ASC').each do |qualification| %>

而不是全部列出 - 有谁知道如何按升序排列?

我想你想要Qualification.pending.order(year_earned: :asc).each do |qualification|

有关详细信息,请参阅此内容:http://apidock.com/rails/ActiveRecord/QueryMethods/order

我会将订单包含在您的范围内。

scope :completed, ->{ where(pending: !true).order('year_earned DESC') }
scope :pending, -> { where(pending: true).order('year_earned DESC')}

在您看来,只要删除 .sort_by 就可以了。

<% Qualification.pending.each do |qualification| %>
 <div class="row">
  <div class="col-md-12">
    <div class="profilequalifications">
     <%= qualification.current_study  %>
    </div>    
   </div>  
  </div>
<% end %>

<% Qualification.completed.each do |qualification| %>
 <div class="row">
  <div class="col-md-12">
   <div class="profilequalifications">
    <%= qualification.completed_award  %>
   </div>    
  </div>  
 </div>
<% end %>