基于字段的嵌套模型的条件顺序
我有一个has_many结果的事件模型。我想根据事件中的字段排序结果。基于字段的嵌套模型的条件顺序
我目前在事件:
has_many :results, :dependent => :destroy, :include => [:event],
:order => "IF(self.etype = 'Stroke', 'results.score ASC', 'results.score DESC')"
...但是这deosn't工作。例如,有没有更好的方式来与named_scope做到这一点? 对不起,我是新来的Rails。
尝试这种情况:
has_many :results, :dependent => :destroy, :include => [:event],
:order => '#{(self.etype == "Stroke") ?
"results.score ASC" : "results.score DESC"}'
当引用字符串或纯红宝石码被用作一个属性值,其在类装载时间被评估。在这种情况下,self
是class
而不是class
的实例。由于用户想要根据对象在手的属性值改变ORDER BY
的方向,所以应该将其包含在侧单引号中。在这种情况下,self
是class
的一个实例。
为什么连字符串都打扰? '(self.etype ==“笔画”)? “results.score ASC”:“results.score DESC”' – 2011-03-15 03:32:36
当您使用带引号的字符串或普通的ruby代码时,该值将在类加载时进行评估。在这种情况下,'self'是'Class'而不是'Class'的实例。由于用户想要根据实例的属性值更改“ORDER BY”方向,因此条件应该放在侧单引号中。 – 2011-03-15 04:22:33
现在我得到:“SQLite3 :: SQLException:无法识别的令牌:”#“:...”。有任何想法吗? – ubangy 2011-03-15 10:32:07
这是否解决了它?
has_many :results, :dependent => :destroy, :include => [:event], :order => "IF(results.etype = 'Stroke', 'event.score ASC', 'event.score DESC')"
如果不是这样,当您尝试这样做在控制台什么错误返回:
Event.first.results
试试这个:
在轨3.0.x的:
has_many :results, :dependent => :destroy, :include => [:event],
:order => "#{(proxy_owner.etype == 'Stroke') ?
'results.score ASC' : 'results.score DESC'}"
In rails 3.xx:
has_many :results, :dependent => :destroy, :include => [:event],
:order => "#{(proxy_association.owner.etype == 'Stroke') ?
'results.score ASC' : 'results.score DESC'}"
希望这会有所帮助。
你为什么在你的查询中做self.etype? – 2011-03-15 03:28:50
根据'Event'中的'etype',我想要所有结果的不同顺序。 – ubangy 2011-03-15 11:07:15