基于字段的嵌套模型的条件顺序

我有一个具有很多结果的事件模型。 我想根据Event中的字段来排序结果。

我目前在活动中:

has_many :results, :dependent => :destroy, :include => [:event], :order => "IF(self.etype = 'Stroke', 'results.score ASC', 'results.score DESC')" 

……但这不起作用。 例如,使用named_scope有更好的方法吗? 对不起我的愚蠢,我是Rails的新手。

试试这个:

 has_many :results, :dependent => :destroy, :include => [:event], :order => '#{(self.etype == "Stroke") ? "results.score ASC" : "results.score DESC"}' 

当引用的字符串或普通的ruby代码用作属性值时,它将在类加载时进行评估。 在这种情况下, self是一个class而不是一个class的实例。 由于用户想要根据对象中的属性值更改ORDER BY方向,因此应将条件括在单引号中。 在这种情况下, selfclass一个实例。

这解决了吗?

 has_many :results, :dependent => :destroy, :include => [:event], :order => "IF(results.etype = 'Stroke', 'event.score ASC', 'event.score DESC')" 

如果没有,当您尝试在控制台中执行此操作时返回了什么错误:

 Event.first.results 

试试这个:

在rails 3.0.x中:

 has_many :results, :dependent => :destroy, :include => [:event], :order => "#{(proxy_owner.etype == 'Stroke') ? 'results.score ASC' : 'results.score DESC'}" 

在rails 3.xx中:

 has_many :results, :dependent => :destroy, :include => [:event], :order => "#{(proxy_association.owner.etype == 'Stroke') ? 'results.score ASC' : 'results.score DESC'}" 

希望这可以帮助。