我有一个有很多结果的事件模型。我想根据Event中的字段来排序结果。
我目前参加活动:
has_many :results, :dependent => :destroy, :include => [:event],
:order => "IF(self.etype = 'Stroke', 'results.score ASC', 'results.score DESC')"
......但这不起作用。例如,使用named_scope有更好的方法吗? 对不起我的愚蠢,我是Rails的新手。
答案 0 :(得分:1)
试试这个:
has_many :results, :dependent => :destroy, :include => [:event],
:order => '#{(self.etype == "Stroke") ?
"results.score ASC" : "results.score DESC"}'
当引用的字符串或普通的ruby代码用作属性值时,它会在类加载时进行评估。在这种情况下,self
是class
而不是class
的实例。由于用户想要根据对象中的属性值更改ORDER BY
方向,因此应将条目括在单引号中。在这种情况下,self
是class
的实例。
答案 1 :(得分:0)
这解决了吗?
has_many :results, :dependent => :destroy, :include => [:event], :order => "IF(results.etype = 'Stroke', 'event.score ASC', 'event.score DESC')"
如果没有,当您尝试在控制台中执行此操作时会返回什么错误:
Event.first.results
答案 2 :(得分:0)
试试这个:
在rails 3.0.x中:
has_many :results, :dependent => :destroy, :include => [:event],
:order => "#{(proxy_owner.etype == 'Stroke') ?
'results.score ASC' : 'results.score DESC'}"
在rails 3.x.x中:
has_many :results, :dependent => :destroy, :include => [:event],
:order => "#{(proxy_association.owner.etype == 'Stroke') ?
'results.score ASC' : 'results.score DESC'}"
希望这有帮助。