Возможно ли выполнить сортировку на основе артематической операции в Ruby on rails active record?

#ruby-on-rails #ruby #ruby-on-rails-3

#ruby-on-rails #ruby #ruby-on-rails-3

Вопрос:

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

Пример: у меня есть столбцы таблицы, над которыми я должен выполнить артематическую операцию и отсортировать на основе ее значения. Пусть столбцы будут math, science and total .И имя таблицы UserMark . Обычно мой запрос выглядит следующим образом

 UserMark.order('(math/total) desc')
  

Это должно упорядочить метки пользователя на основе математической / итоговой операции.Как это можно было бы сделать в Ruby on rails?

Комментарии:

1. Вы говорите «два столбца», а затем перечисляете три столбца. Что не так с order('math/total desc') ?

2. Это должно указывать на таблицу, содержащую много столбцов. но мне нужна операция над определенными столбцами.

3. Я все еще не понимаю, о чем вы спрашиваете. Вы можете сортировать по любому выражению, которое хотите, так в чем проблема?

Ответ №1:

У вас есть две возможности.

Вы можете выполнить сортировку в самом запросе Active Record.

 UserMark.select("math/total as percentage").order('percentage desc')
  

или

Вы можете сделать это методом ruby (этот метод должен быть в вашей модели).

 def percentage
  self.math/self.total
end

def self.sort_by_percentage
  UserMark.all.sort_by(amp;:percentage).reverse
end
  

Комментарии:

1. Спасибо. И есть ли способ получить математическое / общее значение в процентах. В наши существующие записи для временного использования. Я могу выполнить сортировку, используя вышеуказанный метод. но не могу получить разделенное значение атрибута percentage в моих записях.

2. Выполняется ли сортировка в запросе Active record или методом ruby?

3. В запросе Active record.

4. Затем вы можете напрямую получить доступ к столбцу атрибута percentage в объекте. Например, «usermark.percentage» #должен указывать фактическое процентное значение.