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

时间:2011-03-15 02:36:37

标签: ruby-on-rails ruby-on-rails-3 activerecord

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

我目前参加活动:

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

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

3 个答案:

答案 0 :(得分:1)

试试这个:

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

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

答案 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'}"

希望这有帮助。