Условный порядок для вложенной модели на основе поля - PullRequest
1 голос
/ 15 марта 2011

У меня есть модель события, которая имеет результаты. Я хочу заказать результаты на основе поля в событии.

У меня сейчас есть событие:

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

... но это де не работает. Есть ли лучший способ сделать это с named_scope, например? Извините за мою глупость, я новичок в Rails.

Ответы [ 3 ]

1 голос
/ 15 марта 2011

Попробуйте это:

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

Когда в качестве значения атрибута используется строка в кавычках ИЛИ простой код рубина, она оценивается во время загрузки класса.В таком случае self является class, а не экземпляром class.Поскольку пользователь хочет изменить направление ORDER BY в зависимости от значения атрибута объекта в руке, его необходимо заключить в боковую одинарную кавычку.В таких случаях self является экземпляром class.

0 голосов
/ 12 ноября 2013

Попробуйте:

в рельсах 3.0.x:

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

В рельсах 3.xx:

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

Надеюсь, это поможет.

0 голосов
/ 15 марта 2011

Решает ли это это?

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

Если нет, то какая ошибка возвращается при попытке сделать это в консоли:

Event.first.results
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...