2016-04-25 50 views
0

我遍历一组Ruby对象on Rails的,像这样:on Rails的排序按日期红宝石

<% @subject.Association.each do |horse| %> 
<tr> 
    <td> 
    <%= horse['Name'].to_s %> 
    <%= horse['Size'] %> 
    </td> 
    </tr> 
    <% end %> 

马对象有日期字段,称为dateRode。

我想按这个字段排序。

我不是一个Ruby开发者,但我尝试了一些方法可以做到这导致只有语法错误e.g

<% subject.association.each do |horse|-> { order by "dateRode" DESC } %> 

我怎么能在我的代码做到这一点,而无需编辑ActiveRecords等?

回答

2

你可以order法这样的指令集:

<% @subject.Association.order(dateRode: :desc).each do |horse| %> 
    <tr> 
    <td> 
     <%= horse['Name'].to_s %> 
     <%= horse['Size'] %> 
    </td> 
    </tr> 
<% end %> 
1

尝试更换此:

<% @subject.Association.each do |horse| %> 

<% @subject.Association.order(dateRode: :desc).each do |horse| %> 

希望它会帮助你。

0

的另一种方式是,你可以设置一个默认范围为关联模型的排序像下面

class Association < ActiveRecord::Base 
    default_scope { order('dateRode DESC') } 
end 

所以当你做<% @subject.Association它会自动分类

1
<% subject.association.each do |horse|-> { order by "dateRode" DESC } %> 

以上是erb和sql不会去工作的组合。

最好的办法是在控制器调用的模型中创建一个范围。

模型

def self.order_by_date_rode 
    Model.includes(:association).order("associations.dateRode desc") 
end 

,其中型号为型号名称和联想是你想订购的关联的名称。

控制器方法

def some_method 
    @subject = Model.order_by_date_rode 
end 

一个不太推荐的方法是做排序在视图

<% @subject.Association.order(dateRode: :desc).each do |horse| %>