基于字段的嵌套模型的条件顺序
我有一个具有很多结果的事件模型。 我想根据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
方向,因此应将条件括在单引号中。 在这种情况下, self
是class
一个实例。
这解决了吗?
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'}"
希望这可以帮助。
- 如何强制Rails ActiveRecord提交事务刷新
- 使用ActiveRecord和Rails将数据插入postgresql数据库会出现此错误:RuntimeError:ERROR C22003 Minteger o
- 在Rails 3中查找_or_create_by并更新以创建记录
- ConnectionNotEstablished之后在JRuby中有一个multithreading环境
- Rails Arel选择不同的列
- 如何在两个相互依赖的属性上运行回调函数?
- 如何获得最高计数的关联模型(Rails)?
- finder_sql不使用Rails解析字符串
- CSV读取v / s从数据库读取的临时表,循环优化和活动记录使用情况。 ruby